मैंने SFINAE पर कुछ लेख पढ़े हैं, लेकिन मेरे मामले के लिए समाधान नहीं मिल रहा है। यहाँ मैं क्या करना चाहते है:उसी विधि के 2 अलग-अलग कार्यान्वयन बनाने के लिए SFINAE का उपयोग कैसे करें
#include <type_traits>
struct CByteArray {};
struct HLVariant {
HLVariant() {}
HLVariant(const HLVariant&) {}
HLVariant(const CByteArray&) {}
};
template <typename T>
struct Serializer
{
static inline typename std::enable_if<std::is_pod<T>::value, CByteArray>::type serialize(const T& value)
{
static_assert(std::is_pod<T>::value, "Not a POD type");
return CByteArray();
}
static inline typename std::enable_if<!std::is_pod<T>::value, CByteArray>::type serialize(const T& value)
{
return Serializer<HLVariant>::serialize(HLVariant(value));
}
};
template <>
struct Serializer<HLVariant>
{
static inline CByteArray serialize(const HLVariant& value)
{
return CByteArray();
}
};
int main()
{
int i = 0;
Serializer<int>::serialize(i);
Serializer<CByteArray>::serialize(CByteArray());
Serializer<HLVariant>::serialize(HLVariant());
return 0;
}
लेकिन, ज़ाहिर है, मैं error C2039: 'type' : is not a member of 'std::enable_if<false,CByteArray>'
कैसे प्राप्त करने के लिए मैं क्या चाहते हो रही है?
साथ ही, Serializer
किसी भी तरह से पुनर्गठित करना संभव होगा, ताकि टेम्पलेट पैरामीटर को Serializer<int>::serialize(i);
के बजाय Serializer::serialize(i);
को स्पष्ट रूप से घटाया जा सके?
@ नवाज वोटिंग आपके उत्तर को हटाने के लिए, क्योंकि यह समस्या के लिए बेहतर विकल्प प्रस्तावित करता है। –
@ नवाज़: वही। मैंने पहले ही संकलित और उस दृष्टिकोण के साथ अपने कोड का परीक्षण किया है। इसके बारे में भी एक सवाल है। –