簡體   English   中英

標准C ++ 14中零大小數組的解決方法?

[英]Workaround for zero-sized arrays in standard C++14?

我正在為Google的V8 ECMAScript引擎開發綁定工具包。 考慮以下模板函數:

    template<class... Types> void call_v8_function(v8::Local<v8::Function> function,
                                                   Types... args) {
        ...significant amount of context set-up here...

        v8::Local<v8::Value> call_args[] = { V8Utils::to_js_value(isolate, args)... };

        function->Call(this->context, sizeof...(args), call_args);
    }

它使用可變數量的參數,並使用輔助函數將它們映射到v8 :: Value對象的數組。 (參數可以具有任意類型,只要它們可以被to_js_value識別to_js_value )當我使用GCC或Clang進行編譯時,這非常to_js_value

但是,在Visual Studio中,它完全崩潰了。 在不帶任何其他參數的情況下調用此模板化函數時,將聲明大小為0的數組。 當被GCC和Clang接受時,該標准不允許這樣做,並且Visual Studio正確地吐出error C2466: cannot allocate an array of constant size 0

因為我發現這種方法非常方便,所以我正在尋找一種使之起作用的方法,而不是針對無參數情況復制功能,因為這將導致大量的代碼重復。

可以使用std::array代替c樣式的數組,該std::array已經對零大小的數組進行了專門化處理。 此外,對於您的函數調用, data()成員對於空數組也表現良好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM