私はCocos2D-Xゲームを書いています。このゲームでは、プレーヤー、敵、その他のキャラクターが属性をに格納しますCCMutableDictionary
。これは、のデコレータクラスのようなものですstd::map<std::string, CCObject*>
。CCMutableDictionary::objectForKey(const std::string& key)
ディクショナリの値には、メソッドを介してアクセスできます。
さて、私の.cppファイルの多くに含まれているヘッダーファイルにはconst char * const
、次のように、辞書の値にアクセスするためのいくつかの文字列があります。
// in Constants.h
const char* const kAttributeX = "x";
const char* const kAttributeY = "y";
// in a .cpp file
CCObject* x = someDictionary->objectForKey(kAttributeX);
ですから、私が間違っている場合は訂正してください。ただし、std::string
のコピーコンストラクターが呼び出されており、上記のメソッドのいずれかを使用して上記のメソッドstd::string
の1つを呼び出すたびに、一時的なものがスタックにあります。objectForKey
const char* const
std::string
もしそうなら、それらの定数属性キーがすでにオブジェクトである場合、実行時に効率的であると思います。しかし、どうすればそれを正しい方法で行うことができますか?
次のようにConstants.hファイルでそれらを定義すると、正常にコンパイルされますが、何かが正しくないように感じます。
// in Constants.h
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";
この質問がすでに行われている場合は、お詫び申し上げます。StackOverflowで探していた正確な答えが見つからなかったようです。