1

假设我有

 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 抱怨它想要一个由“命名空间”关键字定义的命名空间,跟在任何 using 语句之后。

反正有什么我想做的吗?主要是我不想每次调用静态方法时都完全限定命名空间。我知道它主要只是语法糖,但在我看来,它可以使代码更具可读性。我想知道是否有办法直接对命名空间进行模板化,而不必使用“class”关键字。

4

2 回答 2

1

你不能那样做。既不模板化命名空间,也不使用 class_name。

代码中唯一可以在没有限定的情况下使用类中的静态函数的地方是派生类。

在您的情况下,我会使用 typedef 作为一些短名称,例如

int main()
{
       typedef SomeFunctionalityFor6 SF6;
       SF6::DoSomething();
}
于 2009-01-29T15:34:44.377 回答
1

或者你可以只创建一个本地对象......

int main()
{
  SomeFunctionalityFor6  SF6;
  SF6.DoSomething();
}

您可以随意替换/更改SF6对象。

于 2009-01-29T15:43:11.333 回答