gpt4 book ai didi

c++ - 我怎样才能让 boost::function 不那么宽松?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:59 27 4
gpt4 key购买 nike

typedef boost::function<void (int,bool)> MyCallback;
void RegisterCallback(MyCallback callback);

class A {
public:
void GoodCallback(int intArg,bool boolArg) {
printf("calling GoodCallback (%d,%s)\n",intArg,boolArg?"true":"false");
}

void BadCallback(int intArg) {
printf("calling BadCallback (%d)\n",intArg);
}
};

int TestFunction() {
A * myA=new A();
RegisterCallback(boost::bind(&A::GoodCallback,myA,_1,_2));

RegisterCallback(boost::bind(&A::BadCallback,myA,_1));

return 0;
}

有什么方法可以使对 RegisterCallback 的第二次调用无法编译?

对于上下文:
我最近更改了回调签名并添加了 bool 参数。我以为我已经更新了所有使用它的东西,但我错了。除了每次更改签名时都重命名 RegisterCallback 之外,我希望有一种方法让编译器强制使用所有参数。

最佳答案

文档说

Any extra arguments are silently ignored

为了支持 _N 占位符,必须采用这种方式。证人:

void foo (int a, const char* b) {
std::cout << "called foo(" << a << "," << b << ")" << std::endl;
}

int main () {
boost::bind(foo,_1, _2)(1, "abc", foo, main, 2.0);
boost::bind(foo,_2, _5)(3.0, 2, foo, main, "def");
}

打印

called foo(1,abc)
called foo(2,def)

可以忽略参数列表开头、结尾或中间的任何参数组合。

您需要一个不支持任何类似 _N 占位符的更简单的 Binder 。 Boost 似乎没有。

关于c++ - 我怎样才能让 boost::function 不那么宽松?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com