簡體   English   中英

縮短C ++函數簽名的標准方法

[英]Standard way of shortening C++ function signatures

模板總是變得很漫長,當我有一定的載體和模板包含的對象,並最終看起來就像一堆> > > > > > >幾乎沒有幫助辨別界限有時,像這樣:

std::vector< std::pair< std::string, std::set< std::string > > >

有沒有一種標准的方法來縮短長度,或使項目易於區分? 我的實際代碼是這個類聲明。

我試過縮短函數名稱並輸入定義返回值。

class Event_Maker
{
    public:

        virtual ~Event_Maker() {};

        // this one                                    *this juts out really far   v
        virtual std::vector< std::unique_ptr< Event > > transfer_events( void ) = 0;
};

有沒有一種標准的方法來縮短長度,或使項目易於區分?

使用typedef鍵入別名可能很方便,例如:

typedef std::unique_ptr<Event> EventPtr;
typedef std::vector<EventPtr> EventVector;
virtual EventVector transfer_events( void ) = 0;

順便說一句,你只需要>>之間的空格,你不需要在<或之前>

std::vector<std::pair<std::string, std::set<std::string> > >

UPDATE

正如@ Snowhawk04@ mkrieger1在評論中指出的那樣,使用現代編譯器,你不再需要>>之間的空間。 只需確保使用正確的編譯器標志,例如-std=c++0x with g++ 查看有關>>模板別名的更多信息。

作為一個額外的答案,在C ++ 11中你可以使用using而不是typedef ,兩者都完成同樣的事情:

//typedef pair<string, set<string>> pairStrSetStr;
using pairStrSetStr = pair<string, set<string>>;
vector<pairStrSetStr> vec;

您也可以創建一個在返回類型后中斷的新行。 這就是像Clang-Format這樣的格式化工具。

struct EventMaker {
    virtual ~EventMaker() {};

    virtual std::vector<std::unique_ptr<Event>> 
    transfer_events() = 0;
};

C ++ 11還引入了Trailing-Return-Type 有些人發誓在其預定用途之外討厭它。

struct EventMaker {
    virtual ~EventMaker() {};

    virtual auto transfer_events() 
    -> std::vector<std::unique_ptr<Event>> = 0;
};

不幸的是,我們不能在虛函數上使用C ++ 14的自動返回類型扣除 ,因為返回類型是它與派生類的契約的一部分。

除非你打算編寫多語言代碼(即extern "C"{}; ),否則你可以在不帶參數的函數上省略void參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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