繁体   English   中英

std :: [tr1 ::] ref和boost :: ref之间的混淆

[英]confusion between std::[tr1::]ref and boost::ref

注意:这是GCC 4.1.2。 我们是专有的嵌入式平台。 我们无法更新到新的编译器。 所以C ++ 03 + TR1就是。

我们某处有这样的功能:

template<typename T>
void foo(const boost::any& x)
{
  bar(boost::any_cast<T>(x));
}

然后在绑定表达式中使用它:

std::tr1::bind( &foo<T>, _1);

这会生成以下错误:

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()版本,专门采用boost::any并让它返回正确的类型。 大概

namespace boost {
    std::tr1::reference_wrapper<boost::any const>
    ref(boost::any const& o) {
        return std::tr1::ref(o);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM