簡體   English   中英

從c ++函數返回不同的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM