我正在使用C ++ 14,我的代码需要针对clang,gcc和Microsoft编译器进行构建。我有一个像下面这样的课程

class MyClass {

public:

    AnotherClass    m_member_object;
    int             m_some_value_1;
    int             m_some_value_2;

    MyClass(const AnotherClass & another_object, int some_value_1, int some_value_1) {

        m_member_object = another_object;
        m_some_value_1 = some_value_1;
        m_some_value_1 = some_value_2;
    }

    MyClass(const MyClass & my_class_copy) {

        m_member_object = my_class_copy.m_member_object;
        m_some_value_1 = my_class_copy.m_some_value_1;
        m_some_value_2 = my_class_copy.m_some_value_2;
    }
};


我想对AnotherClass中的成员对象(或可能是指针)进行模板化。当我像下面这样制作MyClass时,尝试从here学习模板,

template<typename T>
T  m_member_object;


编译器抱怨AnotherClass

题:
如何存储member m_member_object is declared as a template类型而不是template,并让AnotherClass用户代码定义要存储在MyClass中的类型?

最佳答案

在整个课程中,每个成员的类型必须相同。

您有两种选择:


MyClass是一种类型,m_member_object是一种将所有必需的可能值加起来的类型,例如std::any。然后,您必须处理拆箱操作,并且只能对其进行类型适当的操作
MyClass是多种类型,m_member_object特定于每个MyClass。通常通过将MyClass用作模板来完成此操作。您可以template <typename T> MyClass<T> : MyClassBase并使用虚拟分派,该分派允许您在外部代码中对一种类型进行操作,但是必须使用某些间接操作(通常为std::unique_ptr<MyClassBase>)来安全地进行操作。

关于c++ - 如何将模板存储为典型C++类的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48203932/

10-16 04:58