我有一个班级(让我们称之为myclass
)。其私有成员变量之一是std::function
,其返回类型myfunctor
称为bool
,它有两个参数:
bool
myfunction
(const std::string & input, std::string & output)
{
output = input;
}
myclass
的构造函数应该接收对输出std::string
的引用作为其唯一参数,因此初始化它的方法将是这样的:
myclass::myclass
(std::string & s)
: myfunctor( std::bind(myfunction, std::placeholders::_1, s) )
{
return;
}
然而,我希望有一种方法可以直接使用operator=
中的std::string
。但我还没有找到它。我没有运气就试过很多不同的组合:
std::bind( (std::string & (std::string::*) (std::string &)) &(s.operator=), placeholders::_1
等等,但编译器(GCC 4.8.0)给了我no matches converting to ...
等错误。
答案 0 :(得分:1)
您需要强制转换才能指定要使用的std::string::operator=
的重载(有多个)。此外,您需要成员函数作用于的对象(=成员函数中使用的this
指针)。
或者,如果你真的需要返回一个bool,你可以将这个调用包装成lambda:
#include <iostream>
#include <string>
#include <functional>
int main()
{
std::string mystring;
std::function<bool(std::string const&)> f =
[&mystring](std::string const& rhs)->bool { mystring = rhs; return true; };
f("hello world");
std::cout << mystring << std::endl;
}
具有显式重载决策的版本:
#include <iostream>
#include <string>
#include <functional>
int main()
{
// nice C++11 syntax
using assignment_FPT = std::string& (std::string::*)(std::string const&);
// in case your compiler doesn't know that yet
//typedef std::string& (std::string::*assignment_FPT)(std::string const&);
std::string mystring;
auto f = std::bind(
static_cast<assignment_FPT>(&std::string::operator=),
std::ref(mystring), // either `ref` or a pointer (or it will be copied)
std::placeholders::_1);
f("hello world");
std::cout << mystring << std::endl;
}