【发布时间】:2008-11-20 19:33:27
【问题描述】:
我正在研究如何编写这个函数:
template <typename Bound>
Bound::result_type callFromAnyList(Bound b, list<any> p)
{
}
那么,如果我有一些功能:
double myFunc(string s, int i)
{
return -3.0;
}
我可以通过这样做来调用它:
list<any> p;
p.push_back((string)"Hello");
p.push_back(7);
double result = callFromAnyList(bind(myFunc, _1, _2), p);
是否可以编写类似于我的callFromAnyList 函数的东西?你能从bind返回的类型中检查结果类型和参数类型吗?然后拨打any_cast<P1>(*p.begin())等?我试图理解绑定代码,但它有点难以理解,而且看起来他们编写它时并没有考虑到检查。
【问题讨论】:
-
我不确定我是否理解您的意图。您希望 callFromAnyList 采用 (1) 一个函数和 (2) 一个参数列表,然后使用该参数列表以类型安全的方式调用该函数?
-
没错。我知道这是一个奇怪的请求,但我想如果有人想出答案,我会学到很多关于 boost::bind 的内容。
-
我认为您的请求完全有效。前段时间我尝试了您要尝试的方法,但未能找到方法。 boost::bind 有一个访问者界面,它会用参数类型和值(如果有的话)给你回电。但我还没有找到一种方法来获取参数类型-.-
-
更清楚一点 - 在这种情况下,我并不真正关心 boost::bind。我真正关心的是检查函数的参数类型。有没有不同的方法——提升或不提升——来做到这一点?似乎 boost::bind 只是持有者,所有的聪明都在 bind 的 operator() 中。