【发布时间】:2013-10-02 18:14:15
【问题描述】:
C++ STL 容器不允许使用不完整类型进行实例化;这是未定义的行为。
这是绕过该限制的有效“技巧”吗?还是这个技巧仍然有未定义的行为?
#include <vector>
template<template<class, class> class Vector = std::vector>
struct my_incomplete_vector
{
struct Element;
// Element is incomplete here, but does it matter anymore?
typedef Vector<Element, std::allocator<Element> > type;
struct Element { typename type::iterator value; };
};
int main()
{
my_incomplete_vector<>::type v;
v.resize(1);
// this isn't normally possible without incomplete types
v[0].value = v.begin();
return 0;
}
【问题讨论】:
-
您不会“将类型存储在容器中”。您将对象存储在容器中。
-
@KerrekSB:我修好了,但你的意思是?
-
这个问题本来就很空洞......为什么天空是用砖头等制成的。
-
我在这里没有看到任何不完整的类型。
-
@JohnSmith
Element用于定义type时不完整。
标签: c++ stl incomplete-type