c++ - 创建一个可以是多种类型的 C++ 数组

标签 c++ arrays pointers object if-statement

我有一个返回 void* 的函数。现在,当此函数完成时,UINT16* 数组作为 void* 返回。 UINT16 数组是在该方法的开头创建的,但现在我需要一种方法来确定数组的类型并改为创建该类型。比如发生了一些数据处理,确定要创建一个int类型的数组,于是创建并返回了一个int数组。还可以创建其他类型,如 double 和 byte。

我该如何实现这一点?

我当前的代码有

UINT16* data_out = new UINT16[arraySize];   

我知道我可以创建一个大的 if/else 或 switch 语句,但我想知道是否有更好的方法。

最佳答案

也许是这样的?

这行不通,但感谢您的支持。事实上它可以工作,但您必须知道 Foo 返回的类型才能使用它。但是类型是在 Foo 内部确定的,这是一个严重的概念缺陷。您应该重新考虑您希望它的工作方式。

    enum class ArrayType
    {
        Int,
        Double
    };

    template <typename T>
    T* CreateArray(size_t size)
    {
        T* t = new T[size];
        return t;
    }

    void* Foo(param1, param2, etc..)
    {
        size_t size;
        ArrayType type;

        .. Do things to determine the type

        switch(type)
        {
            case ArrayType::Int:
                return CreateArray<int>(size);

            case ArrayType::Double:
                return CreateArray<double>(size);

            default:
                return 0;
        }

        return 0;
    }

关于c++ - 创建一个可以是多种类型的 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41602987/

相关文章:

c++ - .h : No such file or directory YOCTO/Openembedded

c++ - 编译器资源管理器和 GCC 有不同的输出

php - 拉维尔 5.1 : Command error [Error exception] Illegal offset type

Java:从 8 位 wav 文件中检索字节数组并将其规范化为 -1.0 到 1.0

c++ - 从剪影中提取最外层轮廓

c++ - 到处都有差异的虚函数

将无符号字符转换为有符号整数

c - C中的双指针问题(下一个单指针,上一个双指针)

c - 指向 C 中重新分配的内存块的多个指针

pointers - 在 Go 中调用接口(interface)指针上的方法