如何修复“一些结构与模板”的初始化程序太多“

时间:2018-06-17 14:30:35

标签: c++ c++14

我有一个名为WtHasher的结构

template <typename V>
struct WtHasher {
    Ul (*hasher(V&));
    bool (*comparator(V&, V&));
};

当我尝试使用花括号样式制作此结构的对象时,出现错误

... some code ...

WtHasher<int> hasher = {
        [] (int &k) {return (Ul)k;},
        [] (int &a, int &b) {return a == b;}
};

... some code ...

错误:

error: too many initializers for ‘WtHasher<int>’
};
^

为什么?结构中有2个字段,括号中有2个字段,因此它应该适合。

1 个答案:

答案 0 :(得分:5)

如果要声明指向函数的指针,它应该是Ul (*hasher)(V&);bool (*comparator)(V&, V&);。否则它只是一个成员函数声明(参见Most vexing parse)。