मैं निम्नलिखित टेम्पलेट का एक उदाहरण में एक सी ++ शाब्दिक स्ट्रिंग परिवर्तित करने के लिए कोशिश कर रहा हूँ:संकलन समय शाब्दिक स्ट्रिंग
template <char ... C>
struct string_literal {
typedef string_constant type;
static constexpr const char value[sizeof...(C)] = {C...};
constexpr operator const char* (void) const {
return value;
}
};
template <char ... C>
constexpr const char string_literal<C...>::value[sizeof...(C)];
मैं इन सहायकों के साथ 'खोल' के लिए विभिन्न स्रोतों के आधार पर आया उपरोक्त टेम्पलेट में उद्धृत स्ट्रिंग मान।
template <unsigned N, const char (&S) [N], typename U>
struct selector;
template <unsigned N, const char (&S) [N], unsigned ...I>
struct selector<N, S, index_sequence<I...>> {
using type = string_literal<S[I]...>;
};
template <unsigned N, const char (&S) [N]>
struct unpack {
using type = typename selector<N, S, make_index_sequence<N>>::type;
};
हालांकि, जब एक कॉल इस मैं एक संकलक त्रुटि मिलती है:
जीसीसी 4.9+ रिपोर्ट: त्रुटि: 'स्थिरांक चार (& रों) [1]' मान्य नहीं है प्रकार के लिए टेम्पलेट तर्क 'स्थिरांक चार (&) [1]' क्योंकि संदर्भ चर एक निरंतर पता
बजना 3.7.1 रिपोर्ट नहीं है: त्रुटि: गैर-प्रकार का टेम्पलेट तर्क उस ऑब्जेक्ट को संदर्भित करता है जिसमें लिंक
मैंने कुछ अलग दृष्टिकोणों की कोशिश की लेकिन त्रुटियां अधिकतर समान हैं। मुझे यहां क्या याद आ रही है?
आप जीएनयू एक्सटेंशन का उपयोग कर सकते हैं ([उदाहरण] (https://github.com/tomilov/parser_generator/blob/master/src/main.cpp#L29))। वर्तमान में यह एकमात्र तरीका सोचने योग्य है। – Orient
वैकल्पिक-संतोषजनक- समाधान जो जीसीसी और क्लैंग के तहत संकलित करता है: http://ideone.com/uKP2qj –
'(शून्य)' सी-izm है। 'ऑपरेटर कॉन्स char * 'वर्तमान में गलत है (त्रुटि-प्रवण): आपको' मान 'के मूल्य को' मान [आकार ... (सी)] = {सी ...};' से 'मान [ आकार ... (सी) + 1] = {सी ..., '\ 0'}; ', क्योंकि वर्तमान में इसकी शुद्धता स्रोत चार सरणी के अधिग्रहण के तरीके पर निर्भर करती है। – Orient