在pre C++ 11的標準庫中,有沒有什麼辦法可以從類似std::initializer_list
的對象中創建類構造函數,這在像支持列表初始化那樣工作時會像std::initializer_list
那樣工作?在C++ 11之前模擬加載列表初始化STL
我可以使用C++ 11(甚至C++ 14)的語言功能。但是,對於一些項目,我仍然在Xcode上使用libstdC++,因爲我需要支持OS X 10.6,所以它沒有C++ 11的支持。
在pre C++ 11的標準庫中,有沒有什麼辦法可以從類似std::initializer_list
的對象中創建類構造函數,這在像支持列表初始化那樣工作時會像std::initializer_list
那樣工作?在C++ 11之前模擬加載列表初始化STL
我可以使用C++ 11(甚至C++ 14)的語言功能。但是,對於一些項目,我仍然在Xcode上使用libstdC++,因爲我需要支持OS X 10.6,所以它沒有C++ 11的支持。
你的問題是你有C++ 11作爲語言功能,但標準庫不支持它。所以你問你是否可以構建從initializer_list
s的容器。
是的,但它不會有相同的語法。這個函數就足夠了:
template<typename Container>
Container from_list(std::initializer_list<typename Container::value_type> il)
{
return Container(il.begin(), il.end());
}
auto vec = from_list<std::vector<int>>({1, 2, 3, 4, 5});
標準庫容器具有與迭代器對一起工作的構造函數。所以這應該適用於任何這樣的容器。
但是,這假設標準庫實際上有initializer_list
類型。如果沒有,那麼你的運氣不好。
在Xcode附帶的pre-C++ 11 stdlibC++中沒有std :: initializer_list。 – Danra
@Danra:「*如果沒有,那麼你的運氣不好。*」 –
如果您的課程是[聚合](http://en.cppreference.com/w/cpp/language/aggregate_initialization)。否則,不。 –
你可以很容易地創建一個模擬'std :: initializer_list'類的類,但是***加強列表初始化是編譯器的一部分,而不是標準庫。編譯器採用支撐初始化器列表並創建'std :: initializer_list'對象。 –
如果沒有在C++ 11中添加的語言支持來實現它,我看不到一種方法。當然,boost有一個「解決方案」:http://www.boost.org/doc/libs/1_52_0/libs/assign/doc/index.html – NathanOliver