Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以将模板实例视为命名空间?_C++_Templates_Namespaces_Using - Fatal编程技术网

C++ 是否可以将模板实例视为命名空间?

C++ 是否可以将模板实例视为命名空间?,c++,templates,namespaces,using,C++,Templates,Namespaces,Using,如果我有 template< unsigned int num > class SomeFunctionality { static unsigned int DoSomething() { //... } static void DoSomethingElse() { } }; typedef SomeFunctionality<6> SomeFunctionalityFor6;

如果我有

 template< unsigned int num >
 class SomeFunctionality
 {
     static unsigned int DoSomething()
     {
         //...
     }

     static void DoSomethingElse()
     {
     }
 };

 typedef SomeFunctionality<6> SomeFunctionalityFor6;
我更希望能够在真正的名称空间中使用“using”语句

 int main()
 {
       using SomeFunctionalityFor6;
       DoSomething();
 }
我怀疑这是行不通的。VisualStudio抱怨说,它希望在任何using语句之后使用“namespace”关键字定义名称空间


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

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

代码中唯一可以使用来自类的静态函数而无需限定的地方是派生类

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

int main()
{
       typedef SomeFunctionalityFor6 SF6;
       SF6::DoSomething();
}

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

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

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

Hmm好的一点,您的回答让我思考是否希望这个特定的情况成为我希望有特定实例的情况,但决定在这种情况下,我更愿意将其视为命名空间中的一组自由函数。
int main()
{
  SomeFunctionalityFor6  SF6;
  SF6.DoSomething();
}