वहाँ टेम्पलेट विशेषज्ञता के लिए एक सूक्ष्म चाल ताकि मैं basic POD
करने के लिए एक विशेषज्ञता आवेदन कर सकते हैं (जब मैं बुनियादी पॉड कहते हैं कि मैं नहीं है, विशेष रूप से struct पॉड (लेकिन मुझे लगता है कि ले जाएगा) चाहते हैं) है।खाका विशेषज्ञता केवल
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
template<>
struct DoStuff</*SOme Magic*/>
{
void operator()() { std::cout << "POD Type\n";}
};
या क्या मुझे प्रत्येक निर्मित प्रकार के लिए विशेषज्ञता लिखनी है?
template<typename T>
struct DoStuff
{
void operator()() { std::cout << "Generic\n";}
};
// Repeat the following template for each of
// unsigned long long, unsigned long, unsigned int, unsigned short, unsigned char
// long long, long, int, short, signed char
// long double, double, float, bool
// Did I forget anything?
//
// Is char covered by unsigned/signed char or do I need a specialization for that?
template<>
struct DoStuff<int>
{
void operator()() { std::cout << "POD Type\n";}
};
यूनिट टेस्ट।
int main()
{
DoStuff<int> intStuff;
intStuff(); // Print POD Type
DoStuff<std::string> strStuff;
strStuff(); // Print Generic
}
ठीक है, मैं उत्सुक हूं - अगर आप "सामान" क्या करना चाहते हैं तो कार्यान्वयन पीओडी प्रकारों के लिए पहले से ही अलग नहीं है? –
मैं boost :: mpl का उपयोग कर रहा हूं। वस्तुओं की तरह वर्ग के लिए मुझे एक ऐसी क्रिया को पंजीकृत करने की आवश्यकता है जो कक्षा वस्तु का उपयोग करता है (और इसके सभी सदस्यों के लिए कार्रवाई पंजीकृत करता है)। सामान्य पीओडी ऑब्जेक्ट्स के लिए मेरे पास एक बहुत ही सरल क्रिया है जो ऑब्जेक्ट पर कार्रवाई करने के लिए पंजीकृत होगी। –