"模板化"命名空间

Man*_*uel 9 c++ templates namespaces

我想建立这样的东西:

File 1:
template<typename Vector>
namespace myNamespace {
  class myClass1{ myClass1(Vector v) {...} }
}

File 2:
template<typename Vector>
namespace myNamespace {
  class myClass2{ myClass2(Vector v) {...} }
}
Run Code Online (Sandbox Code Playgroud)

当然这是不可能的,因为你不能模板命名空间.相反,我可以使用结构而不是命名空间,但是我不能将命名空间函数扩展到几个文件.

有这样一个问题的解决方案吗?

PS:我知道我可以模拟类,但是我必须在创建新类时指定我想要使用的矢量类型.

Mar*_*k B 6

跟进你的评论:

而不是写作

using namespace myNamespace<int>;

只需使用模板化的类并改为编写(或任何变体):

typedef myNamespace::myClass1<int> myClass1Int;
typedef myNamespace::myClass2<int> myClass2Int;
Run Code Online (Sandbox Code Playgroud)

我倾向于认为最好明确使用哪些类型而不是尝试执行某些特定实例化命名空间的操作.

您能否更全面地描述使您认为模板化命名空间有用的问题?

请记住,您总是可以编写一个make_myClass1免费函数来为您推导出模板类型.

  • @Mark BI知道这是一个非常古老的问题,但是如果你想要一个只有静态方法的`Util`类呢?不会使用命名空间更好吗? (2认同)