C++ 在客户端代码的不同部分同时使用boost::bind和std::tr1::bind

C++ 在客户端代码的不同部分同时使用boost::bind和std::tr1::bind,c++,boost,boost-bind,stdbind,C++,Boost,Boost Bind,Stdbind,我正在使用两个使用绑定功能的自定义库。 其中一个使用std::tr1中的绑定功能,而另一个使用boostbind 现在的问题是关于占位符。由于boostbind的占位符位于一个未命名的命名空间中,因此在编译代码时,我会遇到以下错误 <file_name.cpp:line_no:char_no>: error: reference to '_1' is ambiguous /usr/include/c++/4.6/tr1/functional:859:23: error: candid

我正在使用两个使用绑定功能的自定义库。 其中一个使用std::tr1中的绑定功能,而另一个使用boostbind

现在的问题是关于占位符。由于boostbind的占位符位于一个未命名的命名空间中,因此在编译代码时,我会遇到以下错误

<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

如何解决这个问题?对我来说,不可能对库进行更改或使用其他库。提前感谢。

最后的
std
中的占位符由traits类标识

使用traits类将boost占位符转换为
std
占位符,而不是
使用名称空间
占位符


如果这不实用,那么boost占位符可能也是如此:为这两个占位符创建一组新的占位符标记,并将它们同时用于这两个占位符。

该名称空间包含在库头文件中。@rgk:你是说,你有一个
使用名称空间std::tr1::占位符标题文件中的语句?@rgk确定。第3段怎么样?创建新的占位符(相同类型的变量,或者使用traits类将其他类型标记为占位符变量)并使用这些占位符。@MikeMB-Its在库头文件中不是我的。@Yakk我不确定你的意思。你能举个例子吗?
f_args.f_cb = boost::bind(&MyProcess::flush, MyProcess::Type, _1, _2);