以下代码将无法编译,因为“错误:没有匹配函数来调用'mem_fun_ref()'”(gcc版本4.4.6)。
#include <vector>
#include <string>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
class toto
{
char v[10];
public:
toto(char* t) { memcpy(v, t, 9); }
bool test(const char* var) const { return !strncmp(var, v, 9); }
bool test(const string& var) const { return test(var.c_str()); }
};
int main()
{
vector<toto> t;
t.push_back("1");
t.push_back("2");
string name("2");
vector<toto>::iterator it = remove_if(t.begin(), t.end(),
bind2nd(mem_fun_ref(&toto::test), name)); // <= error
t.erase(it, t.end());
return 0;
}
我找到了一个解决方法:创建一个
bool testZ(const string& var) const { return testZ(var); }
但我似乎无法找到正确的模板参数,如果可能的话,给mem_fun_ref(或bind2nd?)以使其在没有我的解决方法的情况下进行编译。
无论如何,如果没有我的解决方法,或者解决方法是“首选”方法吗?
答案 0 :(得分:3)
您应该可以根据C++ overloaded method pointer:
进行投射bind2nd(mem_fun_ref((bool (toto::*)(const string&) const) &toto::test), name));