gpt4 book ai didi

c++ - 如何将模板存储为典型 C++ 类的成员

转载 作者:行者123 更新时间:2023-11-27 23:49:00 25 4
gpt4 key购买 nike

我正在使用 C++ 14,我的代码需要为 clanggccMicrosoft 编译器 构建。我有一个像下面这样的类

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 学习模板,当我像下面这样制作 AnotherClass 时,

template<typename T>
T m_member_object;

编译器提示成员 m_member_object 被声明为模板

问题:
如何存储 template 类型而不是 AnotherClass 并让 MyClass 的用户代码定义要存储在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com