我想扩展一个具有虚函数的基类,该函数接受指向类型数组的指针。派生类更复杂,可以利用多个指向该类型数组的指针。
derived
和other
显示处理该问题的不同解决方案,但我不喜欢它们。有什么我可以做的吗?
struct base {
virtual void set(int* p, std::size_t n) { }
};
struct derived : base
{
virtual void set(int* p, std::size_t n)
{
int** pp = new int*[1]; // must be deleted before destruction
pp[0] = p;
set(1, pp, n);
}
void set(std::size_t count, int* const* pp, std::size_t n)
{
}
};
struct other : base
{
virtual void set(int* p, std::size_t n)
{
m_helper[0] = p;
set(1, m_helper, n);
}
void set(std::size_t count, int* const* pp, std::size_t n)
{
}
private:
int* m_helper[1];
};
答案 0 :(得分:2)
理论上,如果您不想保存指针本身,则应执行以下操作:
virtual void set(int* p, std::size_t n)
{
set(1, &p, n);
}
void set(std::size_t count, int* const* pp, std::size_t n)
{
}
答案 1 :(得分:1)
代码没有说明你要实现的目标,因为每个函数几乎为空。所以我建议不要比使用以下内容更好:
std::vector<int>
int*
std::vector<std::vector<int> >
int**
答案 2 :(得分:0)
您可以使用变量参数列表:
void set(std::size_t count, std::size_t n, ...) {
va_list v;
va_start(v, n);
for (int i = 0; i < count; i++)
{
int* value = va_arg(vl, int*);
// ...
}
va_end(v);
}