【发布时间】:2016-02-23 11:44:30
【问题描述】:
我使用的是第 3 方专有软件包。它使用如下所示的数据模型:
class Base {
...
}
template<class T>
class Derived: public Base {
protected:
T _t;
public:
T& getData();
}
当我与他们的代码交互时,他们会给我指向Base 对象的指针。我想写一些我自己的模板函数。我怎样才能做到这一点?即如果我知道类型 T,我可以转换它,但如果我不知道类型怎么办?我想要的是一个看起来像这样的函数:
template<T>
DataToString(Derived<T> d){
std::stringstream ss;
ss << d.getData();
return ss.str();
}
可能被称为: 基数 b; std::cout
但是当我尝试这样做时,编译器告诉我它无法匹配模板。我现在得到的是每个数据类型的“猜测和检查”if/else 块,我想知道是否有更好的方法。
我认为我的问题与this 有关,但就我而言,我使用的是第 3 方库。
【问题讨论】:
-
T类型是派生类类型的部分,因此在不知道该模板类型的情况下无法访问派生类。您需要将DataToString实现为派生类型的一部分并使其具有多态性。
标签: c++ templates inheritance casting