2015-05-27 66 views
0

我使用了兩個使用綁定功能的自定義庫。 其中一個使用std :: tr1中的綁定功能,而另一個使用boost綁定在客戶端代碼的不同部分使用boost :: bind和std :: tr1 :: bind

現在問題在於佔位符。由於升壓綁定的佔位符是一個無名的命名空間我面臨以下錯誤,當我嘗試編譯我的代碼

<file_name.cpp:line_no:char_no>: error: reference to '_1' is ambiguous 
/usr/include/c++/4.6/tr1/functional:859:23: error: candidates are: std::tr1::_Placeholder<1> std::tr1::placeholders::{anonymous}::_1 
<path>/common/include/boost/bind/placeholders.hpp:55:15: error:     boost::arg<1> {anonymous}::_1 

附加只是從客戶端代碼使用升壓綁定功能,行,我現在用

f_args.f_cb = boost::bind(&MyProcess::flush, MyProcess::Type, _1, _2); 

如何解決這個問題?對我來說,排除了對圖書館進行更改或使用不同的圖書館的可能性。提前致謝。

回答

0

最終std中的佔位符由特徵類標識。

而不是using namespace佔位符,使用特性類來提升佔位符到std佔位符。

如果這樣做不實際,您的提升佔位符的情況可能也是如此:爲兩者創建一組新的佔位符標記,並將其用於兩者。

+0

命名空間包含在庫頭文件中。 – rgk

+0

@rgk:你是說,你的頭文件中有'using namespace std :: tr1 :: placeholders;'語句嗎? – MikeMB

+0

@rgk好的。第3段如何?創建新的佔位符(相同類型的變量,或使用traits類將其他類型標記爲佔位符變量)並使用它們。 – Yakk