好的,所以我正在努力解决以下问题:
我有一个类(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 ++来实现它?
答案 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?
重载的好处是执行相同任务的函数命名的一致性,只是使用不同的参数。