从源中的 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)
{/* */}