-7

よし、みんな!

ここで小さな問題があります。簡単にするために、これは多かれ少なかれ次のようになります。

window.h

template <ObjectType &x>
class foo { stuff }

game.h

class gameclass { ObjectType a; }

main.cpp

gameclass mygame;
foo<mygame.a> fooa;

テンプレート引数として mygame のメンバー 'a' を送信できないため、fooa が失敗します。

クラスメンバーをテンプレートパラメータとして送信するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

1

非型の template parameter、より具体的にはpointer-to-memberを渡したいようです。あなたが望むもののために、あなたはユーザーでなければなりません:

template<ObjectType gameclass::* ptr>
struct foo
// ...

オブジェクトへのポインターがある場合にのみ、オブジェクトのメンバーにアクセスできることに注意してください。

詳細については、こちら (テンプレート パラメーターとしてのメンバーへのポインター)または(メンバーへのポインター) を参照してください。

mygame.a次の理由により、投稿したコードのテンプレートに値を渡すことはできないことに注意してください。

  1. テンプレート パラメーターはコンパイル時であり、値は実行時です。
  2. 非型テンプレート パラメーターは、任意のオブジェクト型にすることはできず、整数型 (または列挙型)、オブジェクト/関数へのポインター/参照、またはメンバーへのポインターのみにすることができます。

編集: テンプレートを に変更しましたtemplate<ObjectType& x>これはobject への参照として正しいです。ただし、mygame.a参考値ではなく値です。メンバーを指定するには、構文 を使用する必要があります。これにより、メンバー&mygame::aへのポインターを使用する必要があります。

于 2013-04-06T21:37:43.683 に答える