c++ - Couldn't match the template method using boost enable_if -


  #include & lt; boost / type_traits.hpp & gt; #include & lt; boost / utility.hpp & gt; नेमस्पेस बूस्ट का उपयोग करना; सर्रिअलजैबेट {}; स्ट्रक्चर्ड व्युत्पन्न: सीरियलज़ेबल {}; क्लास सीरियललाइज़र {सार्वजनिक: टेम्पलेट & lt; typename ValueType & gt; शून्य ऑपरेटर & amp; (कॉन्स्ट टाइनामनाम सक्षम_इफ & lt; is_base_of & lt; सीरियलाइजबल, वैल्यू टाइप & gt;, वैल्यू टाइप); टाइप और मान) {; }}; Int main () {Serializer serializer; व्युत्पन्न तार; धारावाहिक और amp; टार; वापसी 0; }  

मैं जी ++ 4.4.7 का इस्तेमाल कर रहा था, जिसने मुझे एक संकलन त्रुटि दी: त्रुटि: 'ऑपरेटर' के लिए कोई मेल नहीं 'सीरियलाइज़र' में; टार '

कैसे विशेषज्ञता बनने के लिए?

सही साइड मान ऑपरेटर का & amp; प्रकार का होना चाहिए ValueType इसलिए, enable_if भाग एक (नकली) परिणाम प्रकार बनाएं:

  #include & lt; boost / type_traits.hpp & gt; #include & lt; boost / utility.hpp & gt; नेमस्पेस बूस्ट का उपयोग करना; सर्रिअलजैबेट {}; स्ट्रक्चर्ड व्युत्पन्न: सीरियलज़ेबल {}; क्लास सीरियललाइज़र {सार्वजनिक: टेम्पलेट & lt; typename ValueType & gt; Const टाइपनाम सक्रिय_इफ & lt; is_base_of & lt; सीरियलजैबल, वैल्यू टाइप & gt ;, वैल्यू टाइप & gt; :: टाइप ऑपरेटर & amp; (वैल्यू टाइप और amp; v) {वापसी 0; }}; Int main () {Serializer serializer; व्युत्पन्न तार; Int i = 1; धारावाहिक और amp; टार; // ठीक सेरिलाइज़र & amp; मैं; // त्रुटि वापसी 0; }  

C ++ 11 में आप enable_if को एक डिफ़ॉल्ट टेम्प्लेट पैरामीटर बना सकते हैं, जो फ़ंक्शन के हस्ताक्षर को साफ और असम्बद्ध रूप से छोड़ देगा:

  टेम्पलेट & lt; typename ValueType, typename = typename enable_if & lt; is_base_of & lt; सीरियलाइज योग्य, वैल्यू टाइप & gt ;, ValueType & gt; :: type & gt; शून्य ऑपरेटर & amp; (वैल्यू टाइप और amp; v) {}  

Comments

Popular posts from this blog

import - Python ImportError: No module named wmi -

Editing Python Class in Shell and SQLAlchemy -

c# - MySQL Parameterized Select Query joining tables issue -