मैं एसटीएल सेट कंटेनर के गरीब आदमी के संस्करण को लिखने की कोशिश कर रहा हूं, लेकिन मैं टेम्पलेट्स के साथ बहुत सक्षम नहीं हूं। मेरा संस्करण इस प्रकार घोषित किया गया है:

template <class T, class comp>
class set
{
...
}

जब मैं सीधे COMP फ़ैक्टर का उपयोग करता हूं, तो सब कुछ ठीक संकलित लगता है, लेकिन जब मैं इसे वास्तविक stl फ़ंक्शंस में आगे बढ़ाने की कोशिश करता हूं जैसे:

void set_method(const T &elem)
{
        lower = lower_bound(internal.begin(), internal.end(), elem, comp);
}

मुझे error: expected primary-expression before ‘)’ token की तर्ज पर कुछ गंदी त्रुटियां मिलती हैं। क्या ऐसा करने का कोई तरीका है, या समान प्रभाव वाला कुछ है, या क्या मुझे सीधे कॉम्प फ़ैक्टर का उपयोग करने के लिए सबकुछ लागू करना है?

0
veprolet 26 मार्च 2020, 21:22

1 उत्तर

सबसे बढ़िया उत्तर

comp एक प्रकार का पैरामीटर है, जिसका अर्थ है comp एक प्रकार को दर्शाता है, एक वस्तु को नहीं। lower_bound किसी फ़ंक्शन ऑब्जेक्ट की अपेक्षा करता है, न कि किसी प्रकार के फ़ंक्शन ऑब्जेक्ट की, इसलिए आपको एक त्रुटि मिलती है। प्रकार को उस वस्तु में "रूपांतरित" करने के लिए जिसकी आपको आवश्यकता है

lower = lower_bound(internal.begin(), internal.end(), elem, comp{});

जहां comp{} comp प्रकार का ऑब्जेक्ट बनाता है।

अन्यथा आप अपने सेट में एक comp सदस्य बना सकते हैं जैसे

template <class T, class comp>
class set
{
private:
    comp cmp{};
    // ...
public:
    set(comp cmp) : cmp(cmp)
    // ...
    void set_method(const T &elem)
    {
        auto lower = lower_bound(internal.begin(), internal.end(), elem, cmp);
    }
};
3
NathanOliver 26 मार्च 2020, 18:33