2013-12-12 19 views
6

के बीच भ्रम सावधान रहें: यह जीसीसी 4.1.2 है। हम एक मालिकाना एम्बेडेड मंच पर हैं। हम एक नए कंपाइलर को अपडेट नहीं कर सकते हैं। तो सी ++ 03 + टीआर 1 है।std :: [tr1 ::] ref और boost :: ref

हम कहीं न कहीं इस तरह एक समारोह है:

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

जो फिर बाद में एक बाँध अभिव्यक्ति में प्रयोग किया जाता है:

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]

:

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

यह निम्न त्रुटि उत्पन्न करता है

मुझे समझ में आता है कि यह मैं हमें को मारने के लिए Koenig लुकअप। हालांकि, मुझे इस समस्या को दूर करने के बारे में विचारों की कमी है।

कोई भी वहां से बाहर है?

+1

क्या आपके कोड में 'ref' की कमी जानबूझकर है? – Simple

+1

@ सिंपल: आप 'रेफरी' की कमी कहां देखते हैं? – sbi

+0

आपके दो कोड नमूने में 'ref' के लिए कॉल नहीं है, जबकि त्रुटि होती है। मैं पूछ रहा था कि क्या जानबूझकर है या नहीं। एडीएल के आपके उल्लेख से मुझे यकीन नहीं था। – Simple

उत्तर

5

boost::ref() के संस्करण को विशेष रूप से boost::any पर ले जाएं और इसे उचित प्रकार से वापस कर दें। शायद

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

धन्यवाद, डाइटमार, बहुत अच्छा विचार! – sbi

संबंधित मुद्दे