假设我有

 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 的随意对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top