如果不创建指针,我将如何做到这一点?
struct A {
struct B {
std::vector<int> some_Vector; // unknown size
size_t A_size = ????; // must always return the total size of A
};
B struct_B;
};
答案 0 :(得分:4)
向量本身的大小(由sizeof
给出)是常量,并且不受它所包含的元素数量的影响。区分其“逻辑大小”和“物理大小”。毕竟,sizeof(std::vector<int>)
必须评估某些东西,并且向量中没有任何对象,根本没有向量。向量的内容仅影响成员std::vector::size
返回的值。
所以每个结构的大小都是不变的。完全定义两个结构后,您只需要获取它。您可以使用构造函数完成此操作。而不是默认的初始化程序。
struct A {
struct B {
std::vector<int> some_Vector;
size_t A_size;
B();
};
B struct_B;
};
A::B::B() : A_size{sizeof(A)}, some_Vector{} {
}
但坦率地说,我认为没有人会想要捕获sizeof
结构并在运行时挂起它。正如我已经说过的那样,它是不变的。