2016-10-31 24 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; 
}