のは、私たちはクラスObj
と、このメインを持っているとしましょう:は、C++でのパラメーターとしての機能を実行し
class Obj
{
public:
void func1(int n) {}
void func2(std:string n) {}
};
std::vector<Obj> retrieveObjs()
{
std::vector<Obj> result;
// ...
return result;
}
int main()
{
// Call func1 for all obj
{
auto objs = retrieveObjs();
for (auto& obj : objs)
{
obj.func1(100);
}
}
// Call func2 for all obj
{
auto objs = retrieveObjs();
for (auto& obj : objs)
{
obj.func2("xxx");
}
}
return 0;
}
私は次の擬似コードのように、すべてのOBJSから特定の機能を呼び出すための一般的な機能を持っていると思います。
void invokeAll(FUNCTION f, PARAM p) // pseudocode
{
auto objs = retrieveObjs();
for (auto& obj : objs)
{
obj.f(p);
}
}
int main() // pseudocode
{
invokeAll(func1, 100);
invokeAll(func2, "xxx");
}
私はこの仕事をするためにFUNCTION
とPARAM
を交換する方法がわかりません。
template/lambda/for_eachやこれに類する方法で可能ですか?
はい、可能です。あなたが何かに遭遇した場合、それを試して、問題を取り返してください。あなたは、あなたの処分に関連した豊富な質問をここに持っています。 – Barry
さて、['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)と[' std :: bind'](http://en.cppreference。 com/w/cpp/utility/functional/bind)を参照してください。または['std :: mem_fn'](http://en.cppreference.com/w/cpp/utility/functional/mem_fn)。メンバ関数への簡単な古いポインタ。 –
@JoachimPileborgあなたのコメントは実際答えの答えです。 – alexeykuzmin0