c++ - c++中设置任意类型动态数组长度的泛型方法

标签 c++ dynamic-data

我正在做一个将一些 Pascal (Delphi) 代码转换为 C++ 的项目,我想编写一个大致等同于 Pascal“SetLength”方法的函数。这需要对动态数组的引用以及长度并分配内存并返回引用。

在 C++ 中,我正在考虑类似的东西

void* setlength(void* pp, int array_size, int pointer_size, int target_size, ....) {
      void * p;
      // Code to allocate memory here via malloc/new
      // something like:   p = reinterpret_cast<typeid(pp)>(p); 
      //                   p=(target_size) malloc(array_size);
      return p;
}

我的问题是:有没有办法像这样将指针类型传递给函数并成功分配内存(也许通过 typeid 参数?)?我可以用吗

<reinterpret_cast>

不知何故?就用法而言,最终目标将类似于以下内容:

float*** p;
p=setlength(100,sizeof(float***),sizeof(float**),.....);

class B;
B** cp;
cp=setlength(100,sizeof(B**),sizeof(B*),.....);

我们非常欢迎任何帮助。我知道我建议的代码都是错误的,但我想传达总体思路。谢谢。

最佳答案

使用 std::vector 代替原始数组。 然后你可以简单地调用它的resize()成员方法。

并使该函数成为处理任意类型的模板:

如果你想使用你的函数,它可能看起来像这样:

template <typename T>
std::vector<T>& setlength(std::vector<T>& v, int new_size) {
      v.resize(new_size);
      return v;
}

但现在它是如此简单,您可能想要完全消除该函数,而只需调用 resize 开始。

我不完全确定你在你的例子中试图用三重指针做什么,但看起来你不想调整大小,你想初始化到某个大小,这可以是使用 vector 构造函数完成:

std::vector<float>v(100);

关于c++ - c++中设置任意类型动态数组长度的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261598/

相关文章:

wpf - 我们可以将动态数据(数据集或列表)绑定(bind)到WPF中的控件吗

asp.net - 在 EditItemTemplate 内的 ControlParameter 中找不到 Control

c++ - sscanf 写入变量问题

c++ - 在 C++ 中获取 Python 的 `defaultdict` 行为的最简单方法是什么?

c++ - 为什么我必须在这里使用dynamic_cast

javascript - asp mvc - 动态添加数据控件的最佳方式是什么

java - 如何在 log4j.xml 的 appender 中给出动态文件名

c++ - 我需要 C++ 中的一个类型,它实际上是一个成员,而不是嵌套类型

c++ - 将纹理映射到 OpenGL 中的顶点

SEO sitemap.xml 动态内容