[英]Return different types from c++ functions
好的,所以我正在努力解決以下問題:
我有一個類( A
),它包含一些其他類( B
)的vector<B>
(Qt的向量)。 B
級有一個屬性,比方說p
,也有一個名字。
對於一個情況下,我想獲得的上市B
是在課堂上被找到的對象A
它們具有p
屬性集,並為另一種情況,我想獲得的名稱列表B
有對象物業集。
最重要的是,我希望將這兩個函數稱為相同的:)
所以,像:
class A
{
public:
QVector<B*> B_s_with_p() { ... }
QStringList B_s_with_p() { ... }
};
但是我不希望有一個輔助參數來重載方法(是的,這很容易),而我最接近的是一個具有不同名稱的方法......這有效,但它很難看。 模板似乎也不起作用。
有沒有辦法使用今天的C ++來實現它?
作弊是使用對QVector<B*>
或QStringList
的引用作為參數而不是返回類型。 這樣你可以正常重載B_s_with_p
。 我想你不認為這是一個有效的選擇。
只有簽名用於重載方法。 這意味着返回類型不能用於重載。
您必須使用不同的方法名稱或使用參數管理返回值:
class A
{
public:
void B_s_with_p(QVector<B*>&);
void B_s_with_p(QStringList&);
};
B_s_with_p()
可以使用模板類型作為參數。
為什么你認為兩個不同的功能集有兩個不同的名稱是丑陋的? 這正是你應該做的,在這里描述不同的返回類型。
另一種方法是只使用返回對象的函數,然后創建一個names_of
方法,傳遞B
對象列表並返回名稱列表。
檢查你的設計..重載函數是一個具有類似功能但參數類型不同的函數。所以檢查你想要的原因
I would like to have these two functions to be called the same
參考: 函數重載的用途/優點是什么?
重載的好處是執行相同任務的函數命名的一致性,只是使用不同的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.