3

好的,所以我正在努力解决以下问题:

我有一个类 ( A),它包含vector<B>一些其他类 ( ) 的(Qt 的向量B)。该类B有一个属性,比方说p,还有一个名字。

对于一种情况,我想获取B在类A中找到的具有p属性集的对象的列表,而对于另一种情况,我想获取B具有属性集的对象的名称列表。

最重要的是,我希望这两个函数被称为相同的:)

所以,像:

class A
{
public:
    QVector<B*> B_s_with_p() { ... }

    QStringList B_s_with_p() { ... }
};

但我不想有一个辅助参数来重载方法(是的,这很容易),而且我得到的最接近的是一个具有不同名称的方法......它有效,但它很难看。模板似乎也不起作用。

有没有办法使用今天的 C++ 来实现它?

4

4 回答 4

4

作弊是使用对QVector<B*>QStringList作为参数的引用而不是返回类型。这样你就可以B_s_with_p正常超载。我猜你不认为这是一个有效的选择。

于 2013-05-29T13:43:37.803 回答
3

只有签名用于重载方法。这意味着返回类型不能用于重载。

您必须使用不同的方法名称或使用参数管理返回值:

class A
{
public:
    void B_s_with_p(QVector<B*>&);
    void B_s_with_p(QStringList&);
};

B_s_with_p()可以使用模板类型作为参数。

于 2013-05-29T13:45:17.470 回答
0

为什么你认为为两组不同的功能设置两个不同的名称是丑陋的?这正是您在此处描述不同返回类型时应该做的事情。

另一种选择是使用返回对象的函数,然后创建一个names_of传递B对象列表并返回名称列表的方法。

于 2013-05-29T14:52:07.303 回答
-1

检查你的设计..重载函数是一种具有相似功能但参数类型不同的函数..所以检查你为什么要

I would like to have these two functions to be called the same

参考:函数重载的用途/优点是什么?

重载的好处是执行相同任务的函数的命名保持一致,只是参数不同。

于 2013-05-29T13:47:14.680 回答