将可变参数模板参数转换为静态constexpr数组

时间:2018-08-14 18:14:50

标签: c++ c++11 templates variadic-templates constexpr

namespace ct_parser { 
    namespace variadic {
        template <char... Cs>
        struct static_array<char, Cs...>
        {
            static const char value[sizeof...(Cs)];
            static constexpr char val[sizeof...(Cs)] = { Cs... };
        };

        template <char... Cs>
        const char static_array<char, Cs...>::value[sizeof...(Cs)] = { Cs... };

稍后...

    const char * buf3 = ct_parser::variadic::static_array<char, 'a', 'b'>::value; // OK
    const char * buf4 = ct_parser::variadic::static_array<char, 'a', 'b'>::val; // NOT OK

任何人都可以向我解释为什么调用buf3会很好地进行编译,但是一旦调用buf4就会产生编译错误,即:

Undefined reference to ct_parser::variadic::static_array<char, char(97), char(98)>::val

((我利用模板专门化,因此不必将类型char强制转换为自身。

编辑:如果使用支持C ++ 17的编译器,则将静态成员val声明为inline可解决此问题。

0 个答案:

没有答案