首页 > 解决方案 > 如何修复“一些带有模板的结构的初始化程序太多”

问题描述

我有一个名为 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 个字段,所以它应该适合。

标签: c++c++14

解决方案


如果你想声明指向函数的指针,Ul (*hasher)(V&);它应该是。bool (*comparator)(V&, V&);否则它只是一个成员函数声明(参见最令人烦恼的解析)。


推荐阅读