std::具有initializer_list和size的unordered_map构造函数在main中编译,但不在类定



我正在尝试使用构造函数初始化std::unordered_map,该构造函数通过初始化列表和初始存储桶数接受数据。

出于某种原因,如果我把它放在main中,该构造函数就会工作,但当我把它放到类头中时,它会出现语法错误。

具体来说,称为momo.h:的标头

#pragma once
#include <unordered_map>
namespace std 
{
template <>
struct hash<std::pair<uint16_t, uint16_t>>
{
std::size_t operator()(const std::pair<uint16_t, uint16_t>& k) const
{
return (std::hash<long>()((((long)k.first) << 16) + (long)k.second));
}
};
}
class test
{
std::unordered_map<std::pair<uint16_t, uint16_t>, uint16_t> m_Z(
{ /* Fails here: syntax error: missing ')' before '{' */
{std::pair{ 1, 2 }, 3},
{std::pair{ 4, 5 }, 6}
}, 128);
};

而如果我将标题中的定义删除到main中,则:

#include "Momo.h"
int main()
{
test X;
std::unordered_map<std::pair<uint16_t, uint16_t>, uint16_t> Y(
{
{std::pair{ 1, 2 }, 3},
{std::pair{ 4, 5 }, 6}
}, 128);
}

代码编译时没有出现错误。为什么?

您需要在类中支持init list(或统一初始化(std::unordered_map

class test
{
std::unordered_map<std::pair<uint16_t, uint16_t>, uint16_t> m_Z{ // >> brased init
{ 
{std::pair{ 1, 2 }, 3},
{std::pair{ 4, 5 }, 6}
}, 128 
}; // >>>
};

相关内容

  • 没有找到相关文章

最新更新