我正在使用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/