gpt4 book ai didi

c++方法根据字符串返回不同的类型

转载 作者:太空宇宙 更新时间:2023-11-04 14:01:48 26 4
gpt4 key购买 nike

一段时间以来,我一直在与以下问题作斗争:

我的应用程序中有几种数据类型,它们的使用方式如下(非常简化的代码):

QVector<Function*> Container::getFunctions() {return mFunctions};
QVector<Procedure*> Container::getProcedures() {return mProcedures};
....
QVector<Function*> mFunctions;
QVector<Procedure*> mProcedures;

两者都是 FunctionProcedure派生自类 ObjectWithUid其中有

virtual QString getClassUid() = 0;

和两个FunctionProcedure正在实现虚拟方法,并且每个方法都返回各自的类 uid(对于函数,这是 "CUID_FUNC",对于过程,这是 "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:基于字符串属性返回不同对象的 vector ,我可以自动使用它而无需指定类型...

最佳答案

您将不得不以某种方式静态指定 T。

这个

  showObjectList(getFunctions());

隐式指定 T=Function* , 但是

  showObjectList(getListOfObjectsForUid(obj->getClassUid()));

不明确,因为 getListOfObjectsForUid返回类型中只有模板参数。

您可以手动解决歧义:

  showObjectList(getListOfObjectsForUid<ObjectWithUid>(obj->getClassUid()));

由于您所有的对象类型都继承自 ObjectWithUid并且返回类型实际上是 QVector<ObjectWithUid*>而不仅仅是 QVector<ObjectWithUid> .

关于c++方法根据字符串返回不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19000495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com