sbi*_*sbi 6 c++ boost bind tr1
注意:这是GCC 4.1.2.我们是专有的嵌入式平台.我们无法更新到新的编译器.所以C++ 03 + TR1就是.
我们某处有这样的功能:
template<typename T>
void foo(const boost::any& x)
{
bar(boost::any_cast<T>(x));
}
Run Code Online (Sandbox Code Playgroud)
然后在绑定表达式中使用它:
std::tr1::bind( &foo<T>, _1);
Run Code Online (Sandbox Code Playgroud)
这会生成以下错误:
error: call of overloaded 'ref(const boost::any&)' is ambiguous
note: candidates are: std::tr1::reference_wrapper<_Tp> std::tr1::ref(_Tp&) [with _Tp = const boost::any]
note: const boost::reference_wrapper boost::ref(T&) [with T = const boost::any]
我确实理解这是Koenig查找命中我们.但是,我缺乏关于如何规避这个问题的想法.
有谁在那里?
定义一个boost::ref()
专门采用a 的版本boost::any
并让它返回正确的类型.大概
namespace boost {
std::tr1::reference_wrapper<boost::any const>
ref(boost::any const& o) {
return std::tr1::ref(o);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
257 次 |
最近记录: |