1

私が持っているとしましょう

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

     static void DoSomethingElse()
     {
     }
 };

 typedef SomeFunctionality<6> SomeFunctionalityFor6;

意味的には、「SomeFunctionalityFor6」は本質的にテンプレート引数6に固有の名前空間です。したがって、コードでは、実行する代わりに、テンプレートのこのインスタンスを使用します。

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

むしろ、実際の名前空間で「using」ステートメントを使用する機能が必要です。

 int main()
 {
       using SomeFunctionalityFor6;
       DoSomething();
 }

これは、私が思うに、うまくいきません。Visual Studioは、usingステートメントの後に「namespace」キーワードで定義された名前空間が必要であると文句を言います。

とにかく私がやろうとしていることをすることはありますか?主に、静的メソッドを呼び出すたびに名前空間を完全に修飾したくありません。私はそのほとんどが単なる構文糖衣であることを知っていますが、私の意見では、コードをはるかに読みやすくすることができます。「class」キーワードを使用する代わりに、名前空間を直接テンプレート化する方法さえあるのだろうかと思います。

4

2 に答える 2

1

または、ローカルオブジェクトを作成することもできます...

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

自由にSF6オブジェクトを交換/変更できます。

于 2009-01-29T15:43:11.333 に答える
1

そんなことはできません。テンプレート化された名前空間も、class_name の使用もありません。

修飾なしでクラスから静的関数を使用できるコード内の唯一の場所は、派生クラスです。

あなたの場合、次のような短い名前にtypedefを使用します

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