标准C ++ 14中零大小数组的解决方法?

时间:2016-04-10 13:52:35

标签: c++ arrays visual-c++ c++14 variadic-templates

我正在为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识别出来)当我使用GCC或Clang进行编译时,这种方法非常有效。

然而,在Visual Studio中,它完全崩溃了。在没有任何附加参数的情况下调用此模板化函数时,将声明一个大小为0的数组。虽然GCC和Clang接受了,但标准不允许这样做,Visual Studio正确地吐出error C2466: cannot allocate an array of constant size 0

因为我发现这种方法非常方便,所以我正在寻找一种方法使其工作,而不是为无参数情况复制函数,因为这会导致重要的代码重复。 / p>

1 个答案:

答案 0 :(得分:5)

您可以使用已经具有零大小数组专门化的std::array,而不是c样式数组。此外,对于函数调用,data()成员对于空数组也是well-behaved