クラスがあります
class BarBase {
};
メンバー関数へのポインターと同じクラスのオブジェクトへのポインターを格納する派生テンプレート クラス
template<typename TypeName> class Bar: public BarBase
{
void ( TypeName::*action ) ( void );
TypeName* object;
};
のインスタンスを作成Bar
し、それらへのポインタを別のクラスのベクトルに格納しますFoo
class Foo {
private:
vector<BarBase*> myBars;
...
};
今質問に。Fooにはテンプレート機能があります
template <typename TypeName>
void Foo::foo( TypeName* object , void ( TypeName::*action ) ( void ) )
この関数では、この関数のパラメーターと等しいmyBars
フィールドを持つ要素をどのように見つけることができますか? ご覧のとおり、のようなフィールドに直接アクセスすることはできません。これらのフィールドは のメンバーではない (メンバーになることもできない) からです。object
action
this->myBars[i]->action
BarBase
EDIT
私は比較することができobject
ます。virtual size_t getObject (){};
toを追加して、 likeBarBase
でオーバーライドします。次に、2つを比較しますが、数値に変換する方法がわかりません...Bar
virtual size_t getObject (){ return (size_t)this->object; };
size_t
action