2016-10-31 21 views
2

为什么不识别以下文字操作符模板?未识别C++文字操作符模板

template<char... Chars> 
constexpr int operator"" _p(){ 
    return 0; 
} 

int main() 
{ 
    int fs1 = "123"_p; 
} 

更新: 感谢我现在使用的答案:

#include <avr/pgmspace.h> 

template<typename C, C... CC> 
struct PgmString { 
    static constexpr const char* str(){ 
     return &data[0]; 
    } 
    static constexpr const char data[] PROGMEM = {CC..., '\0'}; 
}; 
template<typename C, C... CC> 
constexpr const char PgmString<C, CC...>::data[] PROGMEM; 

template<typename C, C... CC> 
constexpr PgmString<C, CC...> operator"" _pgm(){ 
    return PgmString<C, CC...>(); 
} 

这使单个的字符串到Flash上​​的AVR单片机。 但是,如果我将字符串长度增加一个字符,则使用的闪存大小将增加两个(!)字节。

回答

5

您所期望的字面形式不存在。只有整数和浮动文字才有模板形式;字符串和字符文字不。

5

GCC /铛具有扩展以允许:

template<typename Char, Char... Cs> 
constexpr int operator"" _p(){ 
    return 0; 
} 

然后

int main() 
{ 
    int fs1 = "123"_p; 
}