我有以下结构:
struct foo
{
bool operator()(char a, char b) const
{
return true;
}
};
pattern<char, foo> p;
我有以下模板类:
template<class T, class S = T>
class pattern
{
public:
int fooBar(std::string lhs, std::string rhs)
{
if(equals(lhs, rhs)) { /* ... */ }
}
private:
bool equals(const std::string &lhs, const std::string &rhs) const
{
S s;
if(s(lhs[0], rhs[0]) //"Term does not evaluate to a
// function taking 2 arguments"
{
return true;
}
}
};
我的问题是,我得到了上述错误。所以问题是,我如何才能到达foo
结构中定义的仿函数?
答案 0 :(得分:2)
在您显示的代码中,foo::operator()
需要foo
的实例。它不是static
函数。
并且pattern<T,S>
不包含T
或S
的实例。
您可以通过在某处实例化foo::operator()
来调用foo
。
bool equals(const std::string &lhs, const std::string &rhs) const
{
return S{}(lhs, rhs);
// ^^ create a temporary instance, for example.
}