2015-12-01 72 views
1

我正在處理自定義庫。到目前爲止,我已經將std :: tuple和std :: tie包裝到我自己的myOwn :: Tuple和myOwn :: tie中。它們的功能與std :: tuple和std :: tie相同。我想用std :: ignore做類似的事情。包裝std :: ignore

到目前爲止,我已經寫了以下內容:

namespace myOwn 
{ 
    auto 
    tilde() 
    -> decltype(std::ignore) 
    { 
     return std::ignore; 
    } 
} 

我唯一的問題是,我現在必須使用myOwn ::波浪號()用括號。我希望能夠使用這個myOwn :: tilde。到目前爲止,我已經在讀的std ::忽視的是如何使用它,

這裏:Possible implementations of std::ignore

這裏:Requirements for std::ignore

在這裏:C++: Return type of std::tie with std::ignore

我已經嘗試使用

但這沒有成功。任何幫助,將不勝感激。這個問題可能對試圖包裝對象的其他人有用。

+0

你認爲'std :: ignore'是什麼?一個*類型*或一個*對象*? – Nawaz

+5

你爲什麼包裝std的東西!? –

+0

有'自動tilde = std :: ignore;'有問題嗎? –

回答

5

如果您不需要修改std::ignore,並且只是想將其重命名,然後

decltype(std::ignore) &tilde = std::ignore; 

在命名空間內應該做你所需要的。

std::ignore不保證是DefaultConstructibleCopyAssignable,所以它不能被便攜地構造或複製的,但我們可以參考保存它。這tilde的類型是decltype(std::ignore) &,但由於std::tie需要參考,這應該功能相同std::ignore

+2

或'decltype(std :: ignore)&std :: std :: ignore;'創建別名而不是另一個副本。以上假設'std :: ignore'的類型可以由你構造。 – Yakk

+0

@Yakk好點,我編輯了我的答案。您可能想要對該更正做出回答。 – Chaos

+0

這只是對上述答案的一種改進。修復這一個,我不必! – Yakk