में विभिन्न स्ट्रिंग प्रकारों के लिए एक संकलन-समय "स्थैतिक-अगर" तर्क लागू करना मैं स्ट्रिंग के कंटेनर पर चलने वाला फ़ंक्शन टेम्पलेट लिखना चाहता हूं, उदाहरण के लिए std::vector
।कंटेनर
मैं उसी टेम्पलेट फ़ंक्शन के साथ CString
और std::wstring
दोनों का समर्थन करना चाहता हूं।
समस्या CString
और wstring अलग इंटरफेस है कि, उदाहरण के एक CString
की "लंबाई" पाने के लिए, आप के बजाय आप size()
या length()
फोन wstring के लिए, GetLength()
विधि कहते हैं।
अगर हम था एक "स्थिर करता है, तो" सी ++ में सुविधा, मैं की तरह कुछ लिख सकते हैं:
template <typename ContainerOfStrings>
void DoSomething(const ContainerOfStrings& strings)
{
for (const auto & s : strings)
{
static_if(strings::value_type is CString)
{
// Use the CString interface
}
static_else_if(strings::value_type is wstring)
{
// Use the wstring interface
}
}
}
वहाँ वर्तमान में उपलब्ध सी ++ 11/14 के साथ इस लक्ष्य को प्राप्त करने के लिए कुछ टेम्पलेट प्रोग्रामिंग तकनीक है उपकरण?
पुनश्च
मैं जानता हूँ कि यह vector<CString>
और vector<wstring>
साथ DoSomething()
भार के के एक जोड़े लिखने के लिए संभव है, लेकिन यह सवाल की बात नहीं है।
इसके अलावा, मैं इस फ़ंक्शन टेम्पलेट को किसी भी कंटेनर के लिए काम करना चाहता हूं जिस पर आप एक रेंज-लूप का उपयोग करके पुनरावृत्त कर सकते हैं।
https://www.youtube.com/watch?v=hDwhfjBPKv8 बैठक C++ 2015 – odinthenerd