我有一个返回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/

10-11 23:05
查看更多