不能将 std::p tr_fun 与引用函数一起使用

Cannot use std::ptr_fun with function that takes reference

本文关键字:函数 引用 一起 std tr 不能 fun      更新时间:2023-10-16

不允许使用 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>::运算符 ()(const Something &) const":已定义或声明的成员函数

但是,如果我将 Function 中的参数更改为T x它就可以工作了!

有没有办法在不修改Function的情况下方便地工作?

现场示例:

http://ideone.com/Eno7gF

http://ideone.com/kGmv7r

你不能

这样做。 这是对 std::bind1st 和 std::bind2nd 的基本限制。 问题是它定义了两个()运算符,其中一个已经有const和。 因此,编译器会看到两个相同的函数。 它不会被修复,因为 C++11 已经弃用了这些方法。

另请参阅:

将 bind1st 用于通过引用获取参数的方法

使用 bind2nd() 的奇怪的编译器错误:"成员函数已定义或声明"而不是"引用"

绑定用户定义类的第二个问题