代替:
struct MyStruct{
...
};
std::vector<MyStruct> myVec;
我可以做类似的事情吗?
std::vector<struct MyStruct {...}> myVec;
甚至,因为我不需要此结构的名称,因为我仅在此向量内使用它:
std::vector<struct {...}> myVec?
我使用C ++已经很多年了,我认为这是不可能的。我认为那会很好...
还是有办法?
答案 0 :(得分:0)
最后,我检查了标准容器中存储的任何类型(不知道为什么您引用STL,这是相似但有所不同,并且在任何情况下都是模棱两可的!)。 (强制)声明的类型不完整。如果您想知道,请检查您所使用版本的标准,或者至少在此处提及。
关于模板参数中结构的内联声明,例如尝试时,g++
说“类型可能未在模板参数中定义”。我不能给您一个令人信服的理由,为什么它不起作用。毕竟,所有容器都提供一个element_type
别名,并且使用C ++ 11中的auto
通常不会出现问题。
答案 1 :(得分:0)
以上两个答案都是正确的-您不能定义不完整类型的向量。
但是,您可以声明一个-要求在定义它时,类型必须完整。
struct Foo; // forward declaration
using FooV = std::vector<Foo>; // declaration
struct Foo { int val; }; // definition
FooV v; // define a vector - all is well.
答案 2 :(得分:-2)
否,在声明实际变量或类型时不能这样做,因为C ++是静态类型的语言。允许通用类型的C ++构造是模板,即
template<typename T>
using myVec = std::vector<T>;
可以直接使用,例如
struct someStruct { /* ... */ };
myVec<someStruct> foo;
或使用某些模板代码
template<typename T>
T bar(myVec<T> const&vec)
{
/* ... */
}