C ++模板参数

时间:2014-07-08 21:28:38

标签: c++ templates functor

我有以下结构:

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结构中定义的仿函数?

1 个答案:

答案 0 :(得分:2)

在您显示的代码中,foo::operator() 需要foo的实例。它不是static函数。

并且pattern<T,S> 不包含TS的实例

您可以通过在某处实例化foo::operator()来调用foo

bool equals(const std::string &lhs, const std::string &rhs) const
{
    return S{}(lhs, rhs);
    //      ^^ create a temporary instance, for example.  
}