मैं एक विधि के तर्क के रूप में std::function
का उपयोग करना चाहता हूं और इसके डिफ़ॉल्ट मान को std::stoi
के रूप में सेट करना चाहता हूं।std :: stoi के साथ विधि तर्क के रूप में std :: function को डिफ़ॉल्ट मान के रूप में कैसे बनाएं?
no viable conversion from '<overloaded function type>' to 'std::function<int (const std::string &, size_t *, int)>'
मैं एक समर्पित विधि बनाने जोड़कर संकलन करने में कामयाब रहे:
void test(std::function<int(const std::string& str, size_t *pos , int base)> inFunc=std::stoi)
दुर्भाग्य से मैं निम्नलिखित त्रुटि मिलती है:
मैं निम्नलिखित कोड की कोशिश की।
#include <functional>
#include <string>
int my_stoi(const std::string& s)
{
return std::stoi(s);
}
void test(std::function<int(const std::string&)> inFunc=my_stoi);
पहले संस्करण में क्या गलत है? क्या std::stoi
का उपयोग डिफ़ॉल्ट मान के रूप में करना संभव नहीं है?
यह 'typedf int (* fn) (const std :: string &, size_t *, int) पर शिकायत क्यों नहीं करता है; एफएन एफ = std :: stoi; '? –
@ चार्ल्सफेह्लिवैनियन: क्योंकि केवल एक ओवरलोड उस फ़ंक्शन प्रकार में परिवर्तनीय है (यही कारण है कि मेरे उदाहरण में कास्ट काम करता है)। या तो 'std :: function' के टेम्पलेट कन्स्ट्रक्टर के लिए एक तर्क हो सकता है, और संकलक को यह देखने के लिए कि कौन सा वैध हो सकता है, दोनों टेम्पलेट विशेषज्ञता को तुरंत चालू करने की अनुमति नहीं है। –
@ माइकसेमोर: स्पष्टीकरण के लिए धन्यवाद, मैं सोच रहा था कि ऐसा कुछ था लेकिन क्या पता नहीं लगा सका। –