2012-03-22 80 views
13

我正在尋找C型聯盟的替代品。 boost :: variant是一個這樣的選項。標準C++中有什麼?C++標準庫中boost :: variant的等價物是什麼?

union { 
    int i; 
    double d; 
} 
+1

沒有,但Boost.Variant極有可能在TR2中。 – ildjarn 2012-03-22 22:01:26

+1

不幸的是,大部分的提升都沒有「標準」等值。 – 2012-03-22 22:05:23

+9

使用Boost沒有錯。 C++的重點在於它可以讓你編寫有用的庫。它不會試圖提供所有的東西,而是爲您提供* make *所需的一切工具。使用Boost。 – 2012-03-22 22:12:54

回答

24

正如幾位評論者所說:不,在標準C++中沒有Boost Variant。也許在幾年後會有,但爲什麼要等 - 今天使用Boost Variant!


編輯(四年後,2016):在C++ 17會有std::variant。與boost::variant相似但不完全相同。所以當你的編譯器支持C++ 17時,你將在標準庫中有一個解決方案。

+0

這是如何作爲答案的資格?這是一條評論。 – 2016-07-15 07:32:58

+0

這個答案很快就會過時。 C++ 17將包含'std :: variant',http://en.cppreference.com/w/cpp/utility/variant – TimZaman 2016-08-07 11:55:58

+0

@TimZaman:感謝您的提醒。我添加了一個編輯來記錄C++ 17的支持。 – 2016-08-07 17:10:41

10

幾年過去了:現在a proposal即將開始。可能boost::variant將使它成爲C++ 17!在此之前,我們將不得不忍受boost::variant,這仍然很棒。請注意,std::variant中的細節會有所變化。

更新:建議做到了。 std::variant將成爲新的C++ 17標準的一部分。這是June 2016 meeting report by Herb Sutter。他在那裏證實了這一點。

+0

你可以列出其中的一些變化嗎? – einpoklum 2016-04-08 17:24:39

+0

這些變化仍然可能發生變化。 ;)一些變化是有爭議的。它也不在表面上,但有一些複雜的設計決定。爲了不讓不必要的問題複雜化,我選擇簡潔明瞭。有些問題可以在我的答案中的提案鏈接中找到。 – 2016-04-11 13:22:37

相關問題