从源中的 class 导入类型别名
Import type-alias from class in source
如何在我的源文件中导入 class 的类型别名以供一般使用?
即,考虑我有一个文件 myClass.h
和
template<typenmae T>
class myClass {
using vec = std::vector<double>;
vec some_vec_var;
public:
// some constructor and other functions
myClass(T var);
vec some_function(vec some_var);
void some_other_fcn(vec some_var);
};
我一直按以下方式编写我的源文件 (myclass.cpp
)
#include "myClass.h"
template<typename T>
myClass<T>::myClass(T var){/* */} // fine
template<typename T>
void myclass<T>::some_function(vec some_var){/* */} // fine
// Error: vec was not declared in this scope ...
template<typename T>
vec myClass<T>::some_function(vec some_var){/* */} // not fine
我该如何克服这个问题?类型别名往往变得冗长乏味,因此简单地将 vec 替换为 return-type 及其声明的别名对我来说不是一个可行的解决方案。
我需要将它包裹在命名空间范围内吗?像
namespace MyNameSpace{
class myClass { ... };
}
如此处所述:C++: Namespaces -- How to use in header and source files correctly? ?
或者我可以只导入 class 的命名空间吗?
尾随 return 类型 (C++11) 可能有帮助:
template<typename T>
auto myClass<T>::some_function(vec some_var) -> vec
{/* */}
否则您必须完全符合条件:
template<typename T>
typename myClass<T>::vec myClass<T>::some_function(vec some_var)
{/* */}
如何在我的源文件中导入 class 的类型别名以供一般使用?
即,考虑我有一个文件 myClass.h
和
template<typenmae T>
class myClass {
using vec = std::vector<double>;
vec some_vec_var;
public:
// some constructor and other functions
myClass(T var);
vec some_function(vec some_var);
void some_other_fcn(vec some_var);
};
我一直按以下方式编写我的源文件 (myclass.cpp
)
#include "myClass.h"
template<typename T>
myClass<T>::myClass(T var){/* */} // fine
template<typename T>
void myclass<T>::some_function(vec some_var){/* */} // fine
// Error: vec was not declared in this scope ...
template<typename T>
vec myClass<T>::some_function(vec some_var){/* */} // not fine
我该如何克服这个问题?类型别名往往变得冗长乏味,因此简单地将 vec 替换为 return-type 及其声明的别名对我来说不是一个可行的解决方案。
我需要将它包裹在命名空间范围内吗?像
namespace MyNameSpace{
class myClass { ... };
}
如此处所述:C++: Namespaces -- How to use in header and source files correctly? ?
或者我可以只导入 class 的命名空间吗?
尾随 return 类型 (C++11) 可能有帮助:
template<typename T>
auto myClass<T>::some_function(vec some_var) -> vec
{/* */}
否则您必须完全符合条件:
template<typename T>
typename myClass<T>::vec myClass<T>::some_function(vec some_var)
{/* */}