वहाँ किसी भी तरह से मैं जीसीसी 4.9 में त्रुटि संदेश मिल रहा, जैसा कि नीचे (online version) से पता चला एक वर्ग टेम्पलेट Foo
की functor operator()(int)
कॉल करने के लिएएक वर्ग टेम्पलेट में एक टेम्प्लेटेड functor कॉलिंग
template<typename T>
struct Foo
{
template<typename U>
void operator()(int)
{
}
};
int main(int argc, char *argv[])
{
Foo<char> foo;
foo<bool>(42);
}
है। 3
error: expected primary-expression before ‘bool’
foo<bool>(42);
मैं template
साथ functor पहले जोड़ें हैं तो सदस्य समारोह एक functor नहीं था और ::
, .
, या ->
उपसर्ग के साथ किया गया था। कुछ मदद के बिना संकलक इस अभिव्यक्ति को पार्स करने के बारे में नहीं जानता था; foo<int>
प्रकार के अज्ञात ऑब्जेक्ट के फ़ैक्टर या तत्काल के रूप में।
"ऑपरेटरों को समर्पित टेम्पलेट तर्क प्रकारों के साथ सर्वश्रेष्ठ खेलें" - याद रखने योग्य। मैंने '&&' छोड़ा था। – Olumide
@ ओलुमाइड। 'U && 'तर्क का उपयोग केवल इस विचार के साथ किया जाता है कि यदि प्रकार अधिक जटिल था, तो एक आदिम,' std :: move' का उपयोग किया जा सकता था या 'U &&' अस्थायी रूप से भी बाध्य हो सकता है। एक सरल 'यू' भी ठीक काम करेगा। – Niall