-4

これを ProjectInstance のようなより基本的なものに typedef/alias するにはどうすればよいですか:

((ProjectType*)NamespaceOne::NamespaceTwo::ClassName::StaticVariable)->x=0;

これは静的クラスであり、毎回名前空間 + キャストで呼び出すのは面倒です。

これを何らかのエイリアスに単純化して、次のように参照できるようにするにはどうすればよいですか

ProjectInstance->x=0;

私はもともとこれらの線に沿って何かを考えていました:

#typedef ((ProjectType*)NamespaceOne::NamespaceTwo::ClassName::StaticVariable) ProjectInstance

ProjectInstance は、ProjecType* にキャストされた StaticVariable のエイリアスです。

NamespaceOne::NamespaceTwo::ClassName::StaticVariable

StaticVariable は BaseType のインスタンスです。ProjectType は BaseType を拡張します。ProjectType クラスに追加の変数 "x" があるため、単に StaticVariable を ProjectType にキャストしています。

私が避けようとしているのは、この静的変数にアクセスする必要がある各クラスでポインター/関数を宣言することです。

これまでのところ、解決策は「名前空間を使用する」ことですが、これは以前から認識していましたが、これまでに投稿された最良の解決策です。

したがって、元のコード行を次のように分割します。

 ((ProjectType*)ClassName::StaticVariable)->x=0;

別の解決策があります:

 ClassName::ProjectStaticVariable->x=0;

「ClassName」クラス内に新しいポインターを作成することで、さらに削減することができました。

これをさらに削減するためのより良い方法はありますか?

4

2 に答える 2

1

次のような関数を使用できます。

ProjectType* ProjectInstance()
{
  return static_cast<ProjectType*>(NamespaceOne::NamespaceTwo::NamespaceThree::StaticVariable);
}

そしてそれを次のように使用します:

ProjectInstance()->x = 0;
于 2013-02-03T08:24:05.613 に答える
0

using directiveローカルに電話しますか?

using namespace NamespaceOne::NamespaceTwo::NamespaceThree;
// do something to StaticVariable
于 2013-02-03T08:27:15.570 に答える