C++匿名结构作为std::映射值
C++ anonymous struct as std::map value
我使用的是Visual Studio 2019 std:c++17,它支持匿名结构,例如
struct S
{
struct { int i; };
};
但是,以下代码存在编译错误。
map<int, struct { int i; }> m;
我可以使用匿名结构作为std::map的值类型吗?
你不能直接做,而是间接地,
struct { int i; } s;
std::map<int, decltype(s)> a;
或
using MyType = struct { int i; };
std::map<int, MyType> b;
但是注意CCD_ 1和CCD_。CCD_ 3与CCD_。
匿名结构是在另一个类(结构(中定义的结构。因此,您不能在容器中使用这样的结构,因为在这种情况下,它将不是一个匿名结构,而只是一个未命名结构。
在这个记录中(那是不正确的(
map<int, struct { int i; }> m;
不存在匿名结构。有人试图使用未命名的结构。
你可以写例如
#include <iostream>
#include <map>
int main()
{
using S = struct { int i; };
std::map<int, S> m;
}
但正如我所说,没有匿名结构。
以下是匿名结构(C标准6.7.2.1结构和并集说明符(概念的定义
13结构类型且没有标记的未命名成员称为匿名结构;
相关文章:
- C++匿名结构作为std::映射值
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 将唯一指针插入std::映射
- 重载std::映射不同的密钥类型
- std::映射,只有move构造函数可用
- std::映射服装比较函数和函数/lambda错误
- std::映射导致插入时出现C2664错误
- 将从std::映射中获取的std::pair引用传递给接受std::对引用的函数
- std::映射键作为模板化结构与枚举成员
- std ::映射以构造为钥匙
- 在锁定下清除STD ::映射,而移动到临时对象
- 计算向量的std ::映射为键的值,并将双倍作为值
- 写入/读取 std::映射到二进制文件需要运算符
- 我如何正确地为std ::映射分配内存
- 如何打印包含整数和整数集的std::映射
- 在字符串的std::映射中找到编译错误,long
- 将std ::映射复制到std ::对向量
- 使用std ::映射的键的部分匹配
- 遍历std ::映射,效果少于迭代器之间的比较