从c ++函数返回不同的类型

时间:2013-05-29 13:39:38

标签: c++ overloading

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

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

对于一个案例,我想获得一个B个对象的列表,这个对象可以在A类中找到p属性集,另一个案例我想获得具有属性集的B对象的名称列表。

最重要的是,我希望将这两个函数调用相同:)

所以,比如:

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

    QStringList B_s_with_p() { ... }
};

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

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

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:0)

为什么你认为两个不同的功能集有两个不同的名称是丑陋的?那就是完全你应该做些什么来描述不同的返回类型。

另一种方法是让只是返回一个对象的函数,然后创建一个names_of方法,你传递B个对象的列表并返回列表名字。

答案 3 :(得分:-1)

检查你的设计..重载函数是具有相似功能但参数类型不同的函数。所以检查你想要的原因

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

请参阅:What is the use/advantage of function overloading?

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