[英]constructor with variadic multidimensional initializer_list
我有以下構造函數:
class A {
template<class ...T>
A(std::initializer_list<T> && ... args);
}
我有該課程的代碼:
A a1 = {{5.0f, 6.0f}, {-7.0f, 8.0f}};
A a2 = {{{5.0f, 3.f}, {6.0f, 7.f}}, {{-7.0f, 9.f}, {12.f, 8.0f}}};
可以編譯a1
不能編譯a2
。 我知道,大括號僅是語法語法,默認情況下不制作類型,僅當將其傳遞給帶有可以用initilizer_list std::initializer_list<float>
參數的函數時(例如,對於A
和變量a1
std::initializer_list<float>
)。
我想知道,是否有任何變通辦法可以幫助將任何尺寸的std::initializer_list<std::initializer_list<std::initializer_list<...>...>...>
傳遞給函數/構造函數?
std :: initializer_list ...> ...>,該表單必須具有部分專業化,然后請參考:如果聲明了std :: initializer_list的顯式或部分專業化,則程序格式不正確。
(自C ++ 17起)
我檢查了文檔,並嘗試了幾種不同的技巧,但無法正常工作。 因此,基本的答案是不可能的。 無法使構造函數或任何其他函數接受未定義數目的大括號列表的大括號列表,因為大括號列表沒有類型,並且不能隱式轉換為std::initilizer_list<...>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.