具有不完整值类型的映射
map with incomplete value type
我收到以下错误:
class Test
{
std::map<std::string,Test> test;
};
错误为"字段的类型"Test"不完整"。我读了一些帖子,暗示这可能是xcode附带的libcxx版本中的一个错误,但如果我必须将其更改为:,我一点也不会感到惊讶
class Test
{
std::map<std::string,std::shared_ptr<Test>> test;
};
我只是想再次检查一下,这绝对是一个正确的错误,而不是一个错误。
干杯!
除非另有说明,否则标准要求标准库的模板组件中使用的所有类型都必须是完整的。因此,libc++的错误是正确的。使用不完整类型是未定义的行为(§17.6.4.8[res.on.functions]/2),因此libstdc++接受它也没有错。
您可以使用指针对象来构造完整的类型。但您也可以使用一些允许不完整类型的第三方集合库,例如boost::container::map
被设计为允许不完整的类型。
§17.6.4.8其他功能/2:
特别是,在以下情况下,影响是不明确的:
。。。
如果在实例化模板组件时使用不完整类型(3.9)作为模板参数,除非该组件特别允许。
(明确允许不完整类型的组件只有declval
、unique_ptr
、default_delete
、shared_ptr
、weak_ptr
和enable_shared_from_this
。)
相关文章:
- 将类型映射到整数值后,如何在给定整数值的情况下恢复类型?
- C++17:在编译时将类型映射到整数值
- 为C++重载函数创建SWIG类型映射
- 返回各种类型的函数的SWIG类型映射
- 类型映射资源并将列表转换为矢量(并返回)
- 有没有办法在 C++17 中创建编译时类型映射以进行类型检查?
- 如何在OpenCV中使用双类型映射进行重新映射
- SWIG 多参数类型映射适用于函数,但如果有多个构造函数,则不适用于构造函数
- Swig:如何类型映射c ++字符串常量和python字符串?
- SWIG 类型映射的 python 列表到双倍 *
- SWIG -- 在扩展中使用类型映射
- 嵌入的多个变体类型映射
- SWIG类型映射中的内存释放
- 您将如何为 std::list<std::string> 创建一个类型映射,以在<String> List in C++ 中为 Java 在 SWIG 中创建?
- SWIG-为具有四个参数的函数创建一个类型映射,该参数传递一个字节数组
- 在C++中将类类型映射到其他类类型
- C func 到C++具有非双射参数类型映射的实例成员蹦床
- Swig 界面中的类型映射错误
- 如何在 swig 中引用类型映射类
- 将实例变量类型映射到模板成员函数