不允许使用C ++ 11或Boost。
我正在尝试编译以下代码,但我遇到了问题。 std::ptr_fun
似乎不喜欢参考的参数。
#include <algorithm>
#include <functional>
#include <vector>
struct Something
{
};
template<class T>
T Function(const T& x, int s)
{
// blah blah
return x;
}
int main()
{
std::vector<Something> data(20);
std::transform(data.begin(), data.end(), data.begin(), std::bind2nd(std::ptr_fun(Function<Something>), 8));
}
VS2013错误消息: 错误C2535:'Something std :: binder2nd&gt; :: operator()(const Something&amp;)const':已定义或声明的成员函数
但是如果我将Function
中的参数更改为T x
就可以了!
有没有办法在不修改Function
的情况下方便地工作?
实例:
答案 0 :(得分:2)
你不能这样做。这是std :: bind1st和std :: bind2nd的基本限制。问题是它定义了两个()运算符,其中一个已经有了const&amp;在上面。所以编译器看到两个相同的函数。它不会被修复,因为C ++ 11已经弃用了这些方法。
另见: