C++ 使用模板类指针作为模板参数,而不为其提供参数
C++ Using a template class pointer as a template parameter without giving it a parameter
标题有点混乱,所以希望我能澄清一下。
我有一个使用模板的简单类:
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
类模板提供一个公共基类,确保它有一个virtual
析构函数并使用它来添加实例化的值:
struct ValueBase {
virtual ~ValueBase() {}
};
template <typename T>
struct Value
: ValueBase {
};
顺便说一句,您通常最好不要继承 STL 容器:它们不是为继承而设计的,您最有可能引起微妙的问题,而不是从少量保存的工作中受益。
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 修改函数中的指针(将另一个指针作为参数传递)
- Clang bug?使用指针作为模板参数
- MSVC将仅移动结构参数解释为指针
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何使用非类型模板参数传入指向数组的指针
- 将成员函数指针作为参数传递给模板方法
- 匹配函数指针作为模板参数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 通过智能指针和转换对基本模板参数进行模板推导
- 为函数定义符号不明确的指针参数
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 将函数参数完美转发到函数指针:按值传递呢?
- 保留函数指针模板参数
- 如何构造一个以可变参数指针函数作为成员的类?
- 指向对象的非类型模板参数指针
- c++ 使用 *& as 参数(指针乐趣,三级树方法)