c++ - 对结构成员使用泛型类型

标签 c++ templates struct

我有一个结构:

struct MyStruct {

    const unsigned short *ptr = nullptr;

    /* above pointer might also be:
    const unsigned int   *ptr = nullptr; 
    */

    // ...
};

我使用struct作为类的成员:

class MyClass
{
    // ...

private:
    MyStruct m_struct;
}

MyClass的成员函数内部,我希望能够有一个像这样的开关:

void MyClass::myFunc()
{
    // ...

    switch(myDataType) {

    case USHORT:
        m_struct.ptr = reinterpret_cast<const unsigned short *>(myDataPtr);
        break;

    case UINT:
        m_struct.ptr = reinterpret_cast<const unsigned int   *>(myDataPtr);
        break;

    default:
        break;

    }
}

目前,由于类型不兼容,上述开关无法实现。

我不知道如何使用正确的模板定义我的struct,以便我能够执行上述switch关于类成员函数。

最佳答案

您可以将它们都设为类模板。那么就不需要使用switch了。例如

template <typename T>
struct MyStruct {

    const T *ptr = nullptr;

    // ...
};

template <typename T>
class MyClass
{
    // ...

private:
    MyStruct<T> m_struct;
};

template <typename T>
void MyClass<T>::myFunc()
{
    // ...

    m_struct.ptr = reinterpret_cast<const T *>(myData);
}

关于c++ - 对结构成员使用泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57195660/

相关文章:

c++ - 分数结构数组

c - typedef,在两个函数中找不到错误

c++ - 为什么 Haskell 对于简单的斐波那契比 C++ 更快

java - c++ n java 语言环境

C++ 模板函数获取错误的默认值

c# - 你能在运行时使用 C# 实例化模板类吗

c++ - std::set inserter not respecting custom comparator. (possible compiler bug?)

c++ - 一个人如何降低 std::shared_ptr?

c++ - 如何在 C++ 中将字符串转换为模板化类型

c - 从文件写入/读取结构中的结构