我一直在与以下问题作斗争:
我的应用程序中有几种数据类型,它们的使用方式如下(非常简化的代码):
QVector<Function*> Container::getFunctions() {return mFunctions};
QVector<Procedure*> Container::getProcedures() {return mProcedures};
....
QVector<Function*> mFunctions;
QVector<Procedure*> mProcedures;
两者Function
和Procedure
都派生自一个ObjectWithUid
具有
virtual QString getClassUid() = 0;
并且两者Function
都Procedure
实现了虚拟方法,并且它们中的每一个都返回各自的类 uid(对于函数 this is"CUID_FUNC"
和对于过程 this is "CUID_PROC"
)。
现在,我在其他地方有一个方法:
template <class T> void showObjectList(const QVector<T*> items)
{
// show the list of objects
}
使用如下:
showObjectList(getFunctions());
或者
showObjectList(getFunctions());
正如预期的那样,我可以显示功能或过程。
但现在我希望能够根据某个对象的类 uid 显示列表,所以我需要如下代码:
ObjectWithUid* obj = giveMeMyObject();
showObjectList(< a vector to which the object belongs determined based on class UID >)
问题从这里开始
我写了以下方法:
template <class T> QVector<T*> getListOfObjectsForUid(const QString& uid)
{
if(uid == uidFunction)
{
return getFunctions();
}
return QVector<T*>();
}
我正在尝试像这样使用它:
ObjectWithUid* obj = giveMeMyObject();
showObjectList(getListOfObjectsForUid(obj->getClassUid()));
编译器大喊:error: no matching function for call to getListOfObjectsForUid(const QString&) candidate is template <class T> QVector<T*> getListOfObjectsForUid(const QString& uid)
我怎样才能实现我正在寻找的东西?IE:基于字符串属性返回不同对象的向量,我可以自动使用它而无需指定类型...