それは名前空間としてテンプレートインスタンスを処理することが可能ですか?

StackOverflow https://stackoverflow.com/questions/491994

質問

私が持っていると仮定します。

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

     static void DoSomethingElse()
     {
     }
 };

 typedef SomeFunctionality<6> SomeFunctionalityFor6;

意味的に、「SomeFunctionalityFor6は、」テンプレート引数に特定の名前空間は、本質的である、6だから、テンプレートのこのインスタンスを使用して、代わりにやってコード内の

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

私はむしろ、本当の名前空間ALA「を使って」文

を使用する能力を持っていると思います
 int main()
 {
       using SomeFunctionalityFor6;
       DoSomething();
 }

私は疑ってしまうので、これは、動作しません。 Visual Studioは、それがどのusingステートメント以下「名前空間」のキーワードで定義された名前空間を望んでいると文句を言います。

私がやろうとしている何をするためにとにかくありますか?主に私は完全に私は静的メソッドを呼び出す名前空間毎回を修飾する必要はありません。私はそのほとんどがちょうど糖衣構文を知っているが、私の意見では、コードがはるかに読みやすくすることができます。 「クラス」キーワードを使用するのではなく直接名前空間をテンプレート化するためにも方法があります場合、私は思ったんだけど。

役に立ちましたか?

解決

あなたはそれを行うことはできません。テンプレート化名前空間、また使用してCLASS_NAMEどちらます。

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

は、あなたのケースでは、私は

のように、いくつかの短い名前のtypedefを使用します
int main()
{
       typedef SomeFunctionalityFor6 SF6;
       SF6::DoSomething();
}

他のヒント

それとも、単にローカルオブジェクトを作成することができます...

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

あなたは意志でのSF6 のオブジェクトを変更する/置き換えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top