0

免責事項: CCNode クラスは cocos2d-x フレームワークの一部であり、私が設計したものではありません。

基本クラス CCNode には init メソッドがあります。

virtual bool init();

私の派生クラスには 2 つの引数が必要なので、新しい init メソッドを宣言します。

virtual bool init(int, int);

元の init(int a, int) の代わりに新しい init(int a, int) の使用を強制したいと思います。デフォルトのパラメーターで新しいものを呼び出すオプションがあることは知っていますが、コンテキストでは適切ではありません。

誰かがそれを呼び出そうとした場合、ユーザーに「代わりに init(int, int) を呼び出してください」と伝える方法を探しています。実行時よりもコンパイル時に取得したいと思います。

C++11 を試してみましstatic_assert(false, "message")たが、呼び出さずに失敗します...

4

2 に答える 2

1

誰かが標準ノードメソッドを呼び出すのを本当に防ぎたい場合は、非公開で継承する必要があると思います。ただし、これを行うためのより快適な方法は、単に create メソッドから新しい init を呼び出すことです。これは、オブジェクトを作成するときに外部コードから呼び出される唯一のメソッドです。

于 2013-05-12T17:45:15.400 に答える
0

そこに静的アサートを貼り付けようとしたので、ソースコードにアクセスできるようですね? あなたが望むことを正確に行うことができる唯一の方法は、問題の関数をテンプレート化することです。テンプレート化関数に静的アサートを配置することは、コンパイルされないようにするための良い方法です。

別のオプションは、クラスのプライベート セクションで宣言を非表示にすることです。

最後に、実行時アサーションは、あなたが求めていることを実現する最も一般的な方法です。

その init 関数へのソース コード アクセスがない場合は、あなたが求めていることを行うことができないと思います。

于 2013-05-12T17:07:50.447 に答える