C++容器、协方差和模板
C++ containers, covariance and template
我有一些问题需要找到我的问题的相关解决方案。 我必须从类中返回一些数据,数据类型取决于类。 我的第一个解决方案是这样的:
class Base
{
virtual QVector<Data*> getData() const = 0;
};
class Derived : public Base
{
virtual QVector<DerviedData*> getData() const = 0;
};
但我知道这是不可能的,即使 DerivedData 扩展了数据,因为无效的协变返回类型。
所以我想出了另一个暗示模板的想法。我所做的是将基类转换为模板类:
template<class T>
class Base
{
virtual QVector<T*> getData() const = 0;
}
然后我可以像这样编写一个Derived
构造函数:
Derived::Derived() : Base<DerivedData>() {}
但要知道我还有另一个问题。假设我编写了另一个类,该类具有在参数中采用任何基类的方法。
void Foo::doSomething(Base* b) {
b->getData();
}
这不编译并说
在没有参数列表的情况下无效使用模板名称"Base">
我完全理解。
假设我的代码看起来像这样:
DerivedClass1 d1;
DerivedClass2 d2;
DerivedClass3 d3;
this->doSomething(&d1);
this->doSomething(&d2);
this->doSomething(&d3);
我在这里的解决方案是什么?我可以做一些类似"模板化"方法做的事情吗?
this->doSomething<DerivedData>(&d1);
用像这样的原型
template<class T>
void doSomething(Base<T>* b);
这可能吗?这是一种好的思维方式吗? 来自Java,我曾经通过使用通配符来解决此类问题
abstract List<? extends Data> getData();
但我听说C++中没有这样的事情(或多或少可以用std::is_base_of
之类的东西来模拟)。
谢谢你的时间。
你可以让Derived::getData(
) 返回QVector<Data*>
。当您需要使用它时,请找出QVector
中的指针是指向Data
还是DerivedData
,使用dynamic_cast
或类似方法。
相关文章:
- 为什么是谷神星协方差.计算()似乎永远运行而不返回?
- 为什么需要返回指针来利用协方差?
- Eigen对修复非正定义的协方差矩阵有解吗
- 回调参数中的协方差C++
- 获取长双精度向量的方差
- 我在计算 4 个值的方差时的错误在哪里
- C++容器、协方差和模板
- "shared_ptr"如何实现协方差?
- C++协方差返回类型的缺点是什么
- 我遇到了一个关于多线程的小问题.需要多线程来计算 Pi 和方差
- 如何在犰狳中使用变量/方差函数
- 用c++计算平均值和方差
- 如何实现支持模板协方差的通用工厂
- C 协方差意外行为
- 练习:使用数组计算方差
- 带有指针返回问题的c++协方差问题
- 计算OpenCV中的协方差
- 使用 OpenCV 计算协方差矩阵
- C++类设计:协方差
- 逆方差的常见编程用法是什么?