[英]Using compound literals in C++
我想使用compound literal
初始化Matrix4
類型的變量。 我的構造函數期望float*
。
所以這是我的初始化行:
const Matrix4 Matrix4::identity ( (float[16]) { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } );
這似乎應該起作用,但是Visual Studio表示它是“非標准顯式類型轉換”。 但是我想保留“單行初始化”,除非確實有更方便的方法。
您已經使用無關的靜態成員詳細信息使問題復雜化了。 實際上,該問題可以很容易地重現為:
void foo(float* );
void k() {
foo((float[4]){1, 2, 3, 4});
}
您在這里擁有的是為C99定義的“復合文字”。 按照標准,它在C ++中不可用,但是某些編譯器具有支持此功能的擴展。 從問題本身來看,MSVC似乎也支持此擴展-它在消息中提到了此擴展-但不允許使用代碼。 可能有一種方法可以在MSVC上顯式啟用它,但是我對此並不熟練。
在這種情況下,我真的看不出編寫不符合要求的代碼的原因,因此我建議不要這樣做。
編輯后回答問題,實際上有幾種方法可以實現單線通話。 可以使函數接受std::initializer_list<float>
作為可變數量的參數, std::array<float, 16>
作為固定數量的參數,或者接受gsl::span
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.