我意识到这可能是不可能的,但我会问任何方式。
假设我有一个班级:
class A{
int* array;
public:
//To be clear this class has other members
constexpr int GetSize() { return 10; /*actually this could be a little more than this*/ }
A(int arr[GetSize()]) : array(arr) { }
};
我应该这样声明:
int array[A::GetSize()] = { 0 };
A var(array);
但是我很懒,希望它被视为我根本没有声明数组......就像这样:
A var;
有没有办法实现这个目标?
一些限制:
sizeof(A)
派生的,所以我不能在类中包含数组,因为在确定数组大小之后才能确定sizeof(A)
(需要知道{{} 1}}) sizeof(A)
类必须能够放入模板并以这种方式初始化(这是主要约束)示例:
A
答案 0 :(得分:1)
这听起来很像你想要的(至少相当于):
using A = std::array<int, size>;
A var;
这绝对符合你的前两个限制。我无法弄清楚你的第三个限制是什么意思。您当然可以将array
类型的对象放入模板中,但当您说:&#34;并初始化该方式时,它并不清楚您正在谈论的内容&#34;。这可以像普通数组一样初始化,所以A var = {0};
会很好,如果这就是你的意思。
请注意,尽管在C ++ 11中添加了std::array
,但只能使用C ++ 98功能来编写合理的类似内容(例如,TR1包含array
类型的&#39}。与C ++ 98/03编译器基本相似且兼容。)
答案 1 :(得分:0)
class B
{
friend class A;
int a, b, c; //Whatever you want here
};
class A : public B
{
int array[(sizeof B)];
public:
static constexpr int length = (sizeof B) + (sizeof int) * (sizeof B);
};