2012-02-02 17 views
5

मैं गेटटर विधि के रूप में ओवरलोडिंग() द्वारा कक्षा में कुछ वाक्य रचनात्मक चीनी जोड़ना चाहता हूं। हालांकि, गेटर विधि एक गैर-प्रकार टेम्पलेट तर्क लेता है। एक साधारण परीक्षण मामले पर विचार करें:क्या मैं एक ओवरलोडेड ऑपरेटर को गैर-प्रकार का टेम्पलेट तर्क पास कर सकता हूं?

#include <iostream> 

class Foo 
{ 
public: 
    template <int i> void get() 
    { 
    std::cout << "called get() with " << i << std::endl; 
    } 
    template <int i> void operator()() 
    { 
    std::cout << "called overloaded() with " << i << std::endl; 
    } 
}; 

int main() 
{ 
    Foo foo; 
    foo.get<1>(); 
    foo.get<2>(); 
    foo<3>(); // error: no match for ‘operator<’ in ‘foo < 3’ 
    return 0; 
} 

यह संकलित करता है तथा यदि foo<3>(); बाहर टिप्पणी की अपेक्षा के अनुसार चलता है। क्या सी ++ सिंटैक्स समर्थन करता है जो मैं करने की कोशिश कर रहा हूं, या क्या मुझे गेटटर के लिए नामित विधि के साथ छोड़ देना चाहिए?

+1

मैं इसे अभी साबित नहीं कर सकता लेकिन मुझे यकीन है कि एकमात्र तरीका 'foo.operator() <3>() 'है, जो शायद इस उद्देश्य को हरा देगा। – PlasmaHH

उत्तर

8

वाक्य रचना आप देख रहे हैं मौजूद है, लेकिन आप इसे पसंद नहीं करेगा:

foo.operator()<3>(); 

तो, नामित समारोह के साथ चिपके रहते हैं।

+0

@ कक्षा में लाइटनेस रेस: कभी नहीं – noisy

0

तुम इतनी तरह वर्ग पर टेम्पलेट डालकर प्रबंधन कर सकते हैं:

template<int i> 
class Foo 
{ 
    Foo() 
    { 
     std::cout << "called overloaded() with " << i << std::endl; 
    } 

    static void Get() 
    { 
     std::cout << "called get() with " << i << std::endl; 
    } 
}; 

int main() 
{ 
    Foo<1>::Get(); 
    Foo<3>(); 
    return 0; 
} 

लेकिन एक छोटे से नुकसान जब प्रत्यक्ष() प्रपत्र बुला के रूप में आप एक फू वस्तु का निर्माण करेगी नहीं है।

इसके अलावा, मुझे लगता है कि आपके वास्तविक जीवन कोड में कक्षा फू में कई अन्य चीजें हैं, इसलिए शायद इसे प्रबंधित करने के लिए टेम्पलेट को कक्षा में ले जाने के लिए स्वीकार्य नहीं होगा (जो एक महत्वपूर्ण डिजाइन परिवर्तन हो सकता है) ।

संपादित करें:

वास्तव में के बाद से वहाँ शायद पहले से ही फू का एक उदाहरण है कि ओपी उपयोग कर रहा है, मेरी पूरी प्रस्ताव गूंगा है। ध्यान न देना।

+0

मैं पूरी तरह से आपसे सहमत हूं कि यह शायद टेम्पलेट को कक्षा में ले जाने के लिए स्वीकार्य नहीं होगा। ऐसा नहीं है क्योंकि यह थोड़ा काम पूरा करने के लिए बहुत अधिक कीमत है, लेकिन क्योंकि यह * कुछ भी पूरा नहीं करेगा * –

संबंधित मुद्दे

 संबंधित मुद्दे