我们需要的是一个带有2个方法add()和call()的类。当我们创建一个类时,我们可以使用add()函数添加一个函数,我们希望在调用call()时使用params调用(伪代码)
new A;
new B;
A.add(B.function(int)) // B takes int as an argument
A.call(); // and call() would look like {int i; sendArrayOfSubscribers(i);}
//now we know that B.function was executed with param generated in A;
这样的结构在C ++中是否可行?
答案 0 :(得分:3)
您的代码非常不清楚,但似乎您想要设置一系列任务,然后执行所有任务。
你可以使用boost :: function来创建每个函数,你可以拥有它们的集合(向量)。
然后调用每个函数。类似的东西:
typedef boost::function< void (void) > func_type;
std::vector< func_type > funcs;
// populate funcs,
std::for_each( funcs.begin(), funcs.end(), boost::bind(&func_type::operator(),_1) );
应该有效。 (可能有一个更简单的构造)
你使用更多的boost :: binds来创建你的集合“funcs”。函数不必不带参数,它们可以像你需要的那样使用“int”。你在绑定时传递它,例如:
funcs.push_back( boost::bind( &B::function, b, i ) );
其中“b”是b的实例,i是作为int的参数。
答案 1 :(得分:2)
试试这个(我必须重命名do
,它是C ++中的关键字):
#include <iostream>
#include <vector>
using namespace std ;
typedef void FuncInt (int) ;
class A {
public:
void add (FuncInt* f) ;
void call() ;
private:
vector<FuncInt*> FuncVec ;
} ;
void A::add (FuncInt* f) {
FuncVec.push_back (f) ;
}
void A::call() {
for (size_t i = 0 ; i < FuncVec.size() ; i++)
FuncVec[i] (i) ;
}
static void f0 (int i) { cout << "f0(" << i << ")" << endl ; }
static void f1 (int i) { cout << "f1(" << i << ")" << endl ; }
int main() {
A a ;
a.add (f0) ;
a.add (f1) ;
a.call() ;
}