是否可以将 std::unordered_map<Class, Class> 作为 Class 的成员?
Is it possible to have a std::unordered_map<Class, Class> as a member of Class?
struct var
可以具有成员 std::unordered_map<var, var>
?
这是一个未编译的代码示例,因为hash<json::var>
在使用dict json_dict = dict();
之后声明:
namespace json
{
struct var;
using dict = std::unordered_map<var, var>;
struct var
{
int integer = 0;
std::string string = "";
dict json_dict = dict();
}
}
namespace std
{
template<> struct hash<json::var>
{
std::size_t operator()(const json::var& k) const
{
return hash<string>()(k.string);
}
};
}
最好不使用指针吗?
定义json::var
本身后可以定义hash<json::var>::operator()
:
namespace json
{
struct var;
}
namespace std
{
template<> struct hash<json::var>
{
// just a declaration:
std::size_t operator()(const json::var& k) const;
};
}
namespace json
{
using dict = std::unordered_map<var, var>;
struct var
{
int integer = 0;
std::string string = "";
dict json_dict = dict();
};
}
// definition: can access `json::var`'s members
std::size_t std::hash<json::var>::operator()(const json::var& k) const
{
return k.integer;
}
live wandbox示例
无关,但是
string string = "";
dict json_dict = dict();
等于
string string;
dict json_dict;
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- EASTL矢量<向量<int>>连续的
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- C2011 'CMemDC':Visual Studio 2019中的'class'类型重新定义
- TypeError: [c++ addon class] 不是构造函数
- C++ class template
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- Clearing Class Foo with new(pFoo) Foo()
- C++ class vs a library
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 使用"class"关键字,后跟未声明的标识符