我写了一个地图类:
typedef int (& func(const std::string &));
template <class t_child>
class map final
{
std::vector<t_child> m_table;
const func m_hasher;
public:
explicit map(const func hasher) : m_hasher(hasher) {}
map(const map ©) = delete;
~map();
map &operator=(const map&) = delete;
//***
};
但我收到错误:
map.hpp:15: error: class ‘map<t_child>’ does not have any field named ‘m_hasher’
explicit map(const func hasher) : m_hasher(hasher) {}
^~~~~~~~
出了什么问题?为什么不存在?
答案 0 :(得分:2)
我意识到这不是一个很好的答案,但如果这就是你想要的,我可以告诉你一个快速的方法让它发挥作用。
我经常使用<functional>
这样的事情,因为它通常比函数指针语法更容易记住。我有以下编译。
#include <string>
#include <functional>
using func = std::function<int(std::string&)>;
template <class t_child>
class map final
{
std::vector<t_child> m_table;
const func m_hasher;
public:
explicit map(const func hasher) : m_hasher(hasher) {}
map(const map ©) = delete;
~map();
map &operator=(const map&) = delete;
//***
};
int main() {
return 0;
}
答案 1 :(得分:1)
这不一定与您的问题有关,但您也可以使用标准unordered_map类,并在需要时继承它。