如何解决C ++在需要使用指针的地方使用指针
| 我想扩展一个具有虚函数的基类,该虚函数需要一个指向类型数组的指针。派生类更加复杂,可以利用指向该类型数组的多个指针。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,std::size_t n)
{
}
private:
int* m_helper[1];
};
解决方法
从理论上讲,如果您不想保存指针本身,则应该这样做:
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)
{
}
, 该代码没有说明您要实现的目标,因为每个功能几乎都是空的。因此,除了使用以下内容之外,我没有其他更好的建议:
如果要使用int*
,请使用std::vector<int>
。
如果要使用int**
,请使用std::vector<std::vector<int> >
。
, 您可以使用变量参数列表:
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。