【发布时间】:2013-04-25 11:42:35
【问题描述】:
我已经编写了以下代码。其中函数func()打印头部和数据。
class ICell
{
public:
wstring header;
virtual void Fetch() = 0;
};
template <class T>
class Cell : public ICell
{
public:
//wstring header;
T data;
void Fetch()
{
wcout<< header << L": ";
cout<<data<<endl;
}
// implementation of cell methods
};
class Row
{
public:
vector <ICell *> cells;
};
有没有办法在函数内返回数据而不是打印?如果是这样,应该修改代码的哪一部分? 提前致谢。
int main()
{
Cell<int>c1;
Cell<double>c2;
c1.header = L"Roll", c1.data = 100;
c2.header = L"CGPA", c2.data = 3.5;
Row r;
r.cells.push_back(&c1);
r.cells.push_back(&c2);
vector <ICell *>::iterator it;
for(it=r.cells.begin();it!=r.cells.end();it++)
{
//checkt type of it wherther it points Cell<int> or Cell<double>
}
return 0;
}
我在这里改变了我的问题。在循环内的 main() 中,如何检查 'it' 指向的对象类型?
感谢大家的耐心和帮助:)
【问题讨论】:
-
将
void Fetch();更改为T Fetch(); -
你可以返回一个你正在输出的数据字符串,也许?
-
@AlokSave:如果
T和header都作为一个单元返回,则不会... -
@AlokSave 基类不知道数据类型是什么。他需要的是 CRTP,但它不适用于虚拟功能。根本没有出路。
-
我怀疑这里有一个 XY 问题...
标签: c++ function generics return virtual