gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:38:18 24 4
gpt4 key购买 nike

我有一个这样的结构:

struct A {
void i(int i) {}
void s(string const &s) {}
};

现在当我尝试这个时:

bind1st(mem_fun(&A::i), &a)(0);
bind1st(mem_fun(&A::s), &a)("");

第一行编译OK,第二行报错:

c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional(299): error C2535: 'void std::binder1st<_Fn2>::operator ()(const std::basic_string<_Elem,_Traits,_Ax> &) const' : member function already defined or declared
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>,
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional(293) : see declaration of 'std::binder1st<_Fn2>::operator ()'
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>
]
c:\work\sources\exception\test\exception\main.cpp(33) : see reference to class template instantiation 'std::binder1st<_Fn2>' being compiled
with
[
_Fn2=std::mem_fun1_t<void,A,const std::string &>
]

可能是什么问题?我该如何解决?

编辑:

似乎任何引用参数都是一个问题。因此,如果我将 i 方法更改为 void i(int &i) {} 我会收到类似的错误。

最佳答案

std::bind1st 和 std::bind2nd 不接受带有引用参数的仿函数,因为它们本身形成对这些参数的引用。你可以

  1. 对函数输入使用指针而不是引用
  2. 使用 boost::bind
  3. 接受复制字符串的性能成本

关于c++ - 将 bind1st 用于通过引用获取参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com