gpt4 book ai didi

C++ 使用模板类指针作为模板参数而不给它一个参数

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

标题有点困惑,所以希望我能把它弄清楚。

我有一个使用模板的简单类:

template <class T>
class Value
{
};

还有另一个扩展 unordered_set 的类:

template<class T>
class Collection : public std::unordered_set<T>
{
};

这些类都有一些其他代码,但我认为它们与我的问题无关。

在 Collection 类的特定实现中,我希望它能够接受指向任何值的指针,而不管创建它时使用的模板参数如何。换句话说,我希望能够有类似这样的语义:

class ValueCollection : public Collection<Value*>
{
};

ValueCollection *vc = new ValueCollection();
vc.insert(new Value<std::string>("hello"));
vc.insert(new Value<int>(5));

当然,那是行不通的。我将如何获得类似的功能?

最佳答案

只要给你 Value 类模板一个公共(public)基类,确保它有一个 virtual 析构函数并使用它来添加你的实例化值:

struct ValueBase {
virtual ~ValueBase() {}
};
template <typename T>
struct Value
: ValueBase {
};

顺便说一句,您通常最好继承 STL 容器:它们不是为继承而设计的,您最有可能导致微妙的问题,而不是从少量保存的工作中获益。

关于C++ 使用模板类指针作为模板参数而不给它一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13555173/

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