オブジェクトへのポインタと、ファンクタがboost :: functionを使って構築したファンクタからどのメソッドを呼び出すかの指示を取得したいと思いますブースト::バインド これにより、どのファンクタを実行する必要があるかを自動的に判断することができます。boost :: functionとboost :: bindを使ってファンクタのオブジェクトとメソッドを決定する
以下の(擬似)コード(参照POINTER_OF & METHOD_OFは)私が何をしようとしているを示しています。事前に
class myClassA
{
public:
DoIt(int i) { return i+i; }
};
class myClassB
{
public:
DoItToo(double d) { return d*d; }
};
typedef boost::function0<int> Functor;
myClassA classA;
myClassB classB;
Functor funcA = boost::bind(&myClassA::DoIt, &classA, 10);
Functor funcB = boost::bind(&myClassB::DoItToo, &classB, 12.34);
// Create a vector containing some functors and try to determine the objects
// they are called upon and the methods they invoke
std::vector<Functor> vec;
vec.push_back(funcA);
vec.push_back(funcB);
for (int i = 0; i < vec.size();i++)
{
if (POINTER_OF(vec[i]) == &classA)
{
// This functor acts on classA
if (METHOD_OF(vec[i]) == &myClassA::DoIt)
{
// This functor calls the 'DoIt' method.
}
else if (METHOD_OF(vec[i]) == &myClassB::DoItToo)
{
// This functor calls the 'DoItToo' method.
}
}
// etc...
}
感謝を!
コードあなたが書いたものは醜いです。ごめんなさい。あなたはポインタとメソッドに関する情報をどうしたらいいのですか? – bayda
いくつかのスタイルアドバイス、 "classA"という名前を変更しました。これはクラスではなく、特定のクラスのインスタンスであるオブジェクトです。 "instanceA"は問題ありません。 "instanceOfClassA"は特に冗長ですが、少なくとも正確です。 – Aaron