मैं एक सी ++ 11 समारोह है कि केवल एक पैरामीटर के रूप स्ट्रिंग शाब्दिक स्वीकार करेंगे लिखना चाहते हैं:सी ++ 11 फ़ंक्शन जो केवल स्ट्रिंग अक्षरों को स्वीकार करता है?
void f(const char* s) { static_assert(s is a string literal); ... }
यही कारण है:
f("foo"); // OK
char c = ...;
f(&c); // ERROR: Doesn't compile
string s = ...;
f(s.c_str()); // ERROR: Doesn't compile
etc
वहाँ वैसे भी है इस लागू करने के लिए? फ़ंक्शन का हस्ताक्षर परिवर्तनों के लिए खुला है, क्योंकि मैक्रोज़ या किसी अन्य भाषा सुविधा का उपयोग जोड़ रहा है।
यदि यह संभव नहीं है तो निकटतम अनुमान क्या है? (क्या उपयोगकर्ता परिभाषित अक्षर किसी भी तरह से मदद कर सकते हैं?)
यदि जीसीसी 4.7/लिनक्स में कोई प्लेटफ़ॉर्म विशिष्ट तरीका नहीं है?
स्ट्रिंग अक्षर के साथ आप क्या करेंगे जो आप गैर-स्ट्रिंग-अक्षर के साथ नहीं कर सकते हैं? और एक स्ट्रिंग अक्षर का उपयोग करके शुरू किया गया 'कॉन्स्ट char * const' चर गुजरने के बारे में कैसे? या एक स्ट्रिंग अक्षर के लिए एक 'कॉन्स चार (और सरणी) [] 'संदर्भ? – hvd
यह संभव नहीं है, क्योंकि स्ट्रिंग अक्षर केवल 'char const [n]' arrays हैं, और जैसे कि उनसे अलग नहीं हैं। – Xeo
हो सकता है कि उपयोगकर्ता द्वारा परिभाषित स्ट्रिंग अक्षर का उपयोग किया जा सके जो उस प्रकार को परिवर्तित करता है जिसमें डेटा केवल पढ़ने के लिए होता है जब यह एक रावल्यू संदर्भ होता है (इसलिए यह नामित चर नहीं हो सकता है)। लक्ष्य यह लागू करना है कि स्ट्रिंग शब्दशः कॉल के बिंदु पर कोड में टाइप की गई है, और स्थिर रूप से एप्लिकेशन छवि में संकलित है। –