是否有可能把模板实例作为命名空间?
-
20-08-2019 - |
题
假设我有
template< unsigned int num >
class SomeFunctionality
{
static unsigned int DoSomething()
{
//...
}
static void DoSomethingElse()
{
}
};
typedef SomeFunctionality<6> SomeFunctionalityFor6;
在语义上,“SomeFunctionalityFor6”实质上是特定于模板参数命名空间,6。因此在使用该模板的这个实例,而不是做代码
int main()
{
SomeFunctionalityFor6::DoSomething();
}
我宁愿使用“使用”的声明阿拉真正的命名空间的能力。
int main()
{
using SomeFunctionalityFor6;
DoSomething();
}
这,我会怀疑不起作用。 Visual Studio中抱怨说,它希望遵循任何使用声明的“命名空间”关键字定义的命名空间。
反正做什么我想要做什么?主要是我只是不想完全限定的命名空间,每次我调用静态方法。我知道它大多只是语法糖,但在我看来,它可以使代码更易读。我不知道是否有甚办法模板化名称空间直接而不必使用“类”的关键字。
解决方案
您不能这样做。既不模板化命名空间,也不使用CLASS_NAME。
在,可以使用静态函数从一类不加限定的代码唯一地导出类。
在你的情况,我会用一个typedef一段简短的名称,如
int main()
{
typedef SomeFunctionalityFor6 SF6;
SF6::DoSomething();
}
其他提示
或者你可以创建一个本地对象...
int main()
{
SomeFunctionalityFor6 SF6;
SF6.DoSomething();
}
您可以替换/修改的 SF6 的随意对象。
不隶属于 StackOverflow