2016-08-29 11 views
5

मैं तलाश रहा है कितनी दूर मैं constexpr चार स्थिरांक ले सकता है * इस जवाब से संयोजन: constexpr to concatenate two or more char stringsconstexpr सी स्ट्रिंग संयोजन, एक constexpr संदर्भ में प्रयोग किया मापदंडों

मैं निम्नलिखित उपयोगकर्ता कोड से पता चलता है कि मैं वास्तव में क्या 'है मैं करने की कोशिश कर रहा हूँ। ऐसा लगता है कि संकलक यह नहीं देख सकता कि फ़ंक्शन पैरामीटर (ए और बी) को कॉन्सएक्सप्र के रूप में पास किया जा रहा है।

क्या कोई भी उन दोनों को बनाने का तरीका देख सकता है जो मैं इंगित करता हूं कि नीचे काम नहीं करते हैं, वास्तव में काम करते हैं? इस तरह के कार्यों के माध्यम से चरित्र सरणी को गठबंधन करने में सक्षम होना बेहद सुविधाजनक होगा।

template<typename A, typename B> 
constexpr auto 
test1(A a, B b) 
{ 
    return concat(a, b); 
} 

constexpr auto 
test2(char const* a, char const* b) 
{ 
    return concat(a, b); 
} 

int main() 
{ 
    { 
    // works 
    auto constexpr text = concat("hi", " ", "there!"); 
    std::cout << text.data(); 
    } 
    { 
    // doesn't work 
    auto constexpr text = test1("uh", " oh"); 
    std::cout << text.data(); 
    } 
    { 
    // doesn't work 
    auto constexpr text = test2("uh", " oh"); 
    std::cout << text.data(); 
    } 
} 

LIVE example

उत्तर

4

concat जरूरत const char (&)[N], और अपने मामले के दोनों में, प्रकार const char* हो जाएगा, तो आप के रूप में अपने समारोह बदल सकता है:

template<typename A, typename B> 
constexpr auto 
test1(const A& a, const B& b) 
{ 
    return concat(a, b); 
} 

Demo

संबंधित मुद्दे