具有派生类的模板化数据类型
Templated data types with derived classes
假设我有以下内容:
class Base
{
protected:
Base() { }
};
class A : public Base
{
};
class B : public Base
{
};
现在假设我用一个模板来做这件事:
TemplatedClass<Base> *generic = new TemplatedClass<A>();
它不起作用,我相信我明白为什么,但我想知道我是否可以做一些类似的事情。我有几个表单的模板专业化
typedef TemplatedClass<A> ASpec;
typedef TemplatedClass<B> BSpec;
typedef TemplatedClass<C> CSpec;
我有一个变量,我想将其类型推迟到运行时,以便我可以像
if(condition1)
generic = new ASpec();
else if(condition2)
generic = new BSpec();
有什么办法可以解决这个问题吗?我没有能力改变类是模板化而不是从基类继承的事实,或者我只是这样做。
这
在C++是不可能的。A
源自Base
并不意味着TemplatedClass<A>
源自TemplatedClass<Base>
。
请参阅此堆栈溢出帖子以获取替代方案:从子类的 STL 向量到基类向量的转换
你可以从TemplatedClass<Base>
派生TemplatedClass<T>
,要么通过专门化 if for Base
,要么通过提供一个像这样的虚拟类:
struct Dummy {};
template <typename T>
struct BaseClass<T> {
typedef TemplatedClass<Base> Type;
};
template <>
struct BaseClass<Base> {
typedef Dummy Type;
};
template <typename T>
struct TemplatedClass : BaseClass<T>::Type
{
//...
};
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 如何使虚函数接受仅在派生类中定义的数据类型?
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 如何在派生类上强制实现特定数据类型的构造函数?
- 派生数据类型与抽象数据类型
- 使用MPI/OpenMP的C 程序带有派生数据类型(嵌套类对象)容器
- 具有数据类型的C 抽象基础将在派生类中定义
- 具有灵活大小的结构的 MPI 派生数据类型
- C MPI在不同机器上派生的数据类型
- 如何在MPI中从结构类型创建新的派生数据类型
- 如何将MPI派生的数据类型用于三维数组
- c++中派生类携带不同数据类型的最佳方式
- 具有派生类的模板化数据类型