【发布时间】:2016-04-14 19:22:53
【问题描述】:
如果我有一个基类 A,我希望能够在 A 中编写代码,该代码使用一个大小由其子级决定的数组
我希望能够拥有一个指向 A 的指针数组,但我不想为每个长度创建单独的成员函数
我能想到的最好的方法如下:
class A
{
char type;
int * values;
int calc(int pos); // implementation is not relevant to question
public:
A (int * arr) : values(arr) {}
int foo(int pos)
{
int index=calc(pos);
return values[index];
}
};
template <size_t X>
class B : public A
{
int vals[X];
public:
B() : A(vals) {}
};
template<>
class B<0>; // don't want 0 allowed
这允许A访问一个由孩子决定大小的数组,它是连续的内存
但是,它浪费了values 指针的空间并混淆了编译器可以用于优化的信息,因为在实现时它不必是子级传递构造的连续内存,但我想要求连续记忆。
理想情况下,我想直接在A中使用偏移量
在C 中,这与int values[] 相同,但没有C++ 等效项
【问题讨论】:
-
基类可以是模板吗?
-
代码是错误的。指向数组的指针不是指向其数据类型的指针!
-
std::vector<int> 可能吗?
-
如果
B分配的内存不连续,A如何安全访问个别成员?为此,B应该提供一个带有类似int& value_at(size_t offset)原型的 getter。 -
向量应该和数组一样快。它基本上是一样的。事实上,它的内部完全一样。
标签: c++ arrays inheritance