mem_fun_ref:未解析的重载函数类型

时间:2014-02-11 18:12:05

标签: c++ std

以下代码将无法编译,因为“错误:没有匹配函数来调用'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?)以使其在没有我的解决方法的情况下进行编译。

无论如何,如果没有我的解决方法,或者解决方法是“首选”方法吗?

1 个答案:

答案 0 :(得分:3)

您应该可以根据C++ overloaded method pointer

进行投射
bind2nd(mem_fun_ref((bool (toto::*)(const string&) const) &toto::test), name));