我受够了pass-callback-data-as-void*-struct反模式。Boost bind很好地解决了这个问题,但这是一个不可接受的依赖。什么是轻量级的替代方案?我怎么才能自己写得尽可能简单呢?
发布于 2008-12-19 16:13:29
我不熟悉boost:bind,但它是这样的吗?
#include <iostream>
void foo (int const& x) {
std::cout << "x = " << x << std::endl;
}
void bar (std::string const& s) {
std::cout << "s = " << s << std::endl;
}
template<class T>
void relay (void (*f)(T const&), T const& a) {
f(a);
}
int main (int argc, char *argv[])
{
std::string msg("Hello World!");
relay (foo, 1138);
relay (bar, msg);
}输出--
x = 1138
s = Hello World!发布于 2008-12-19 16:21:07
首先,我质疑您的断言,即它对您来说太重了,无法使用。
其次,如果您需要控制行为,请滚动您自己的模板。
第三,如果您害怕滚动自己的模板,我怀疑您判断boost::bind太重而无法使用的能力。
发布于 2008-12-19 19:54:47
看看Don Clugston的fast delegate吧。它被认为是你能在大多数当前平台上找到的最快的委托(编译成2条汇编指令)。Version 1.4+获得了一些Boost.Bind兼容性。
https://stackoverflow.com/questions/381363
复制相似问题