我有一个名为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个字段,因此它应该适合。
答案 0 :(得分:5)
如果要声明指向函数的指针,它应该是Ul (*hasher)(V&);
和bool (*comparator)(V&, V&);
。否则它只是一个成员函数声明(参见Most vexing parse)。