मेरी समस्या कोड शाब्दिक:C++ अधिभार: स्ट्रिंग बढ़ावा बनाम :: समारोह अस्पष्टता
#include <string>
#include <boost/function.hpp>
void func (const std::string&) {}
void func (const boost::function<void()>&) {}
int main() {
func (main); // good
func ("bad");
return 0;
}
=>
error: call of overloaded ‘func(const char [4])’ is ambiguous
overload.cpp:4: note: candidates are: void func(const std::string&)
overload.cpp:5: note: void func(const boost::function<void()()>&)
मुझे लगता है मैं स्पष्ट रूप से समारोह (स्ट्रिंग (फोन करके इस को हल कर सकता है पता है "बुरा ")); या एक func (const char *) प्रदान करके, लेकिन मुझे आश्चर्य है कि कॉलर पक्ष को उदाहरण के रूप में और अधिक अधिभार के बिना रखने का कोई तरीका है या नहीं।
शायद बढ़ावा :: enable_if के साथ कुछ? किसी भी संकेत के लिए धन्यवाद।
तुम सच में लगता है कि कारण अधिभार जो लेता है 'बढ़ावा :: function' है आपको लगता है कि अधिभार के बिना संकलित करने के लिए करने की कोशिश की, उदाहरण के लिए है? क्या वह काम करेगा? – Nim
हां इसके boost :: function के कारण होता है। मैंने जो उदाहरण पोस्ट किया है वह पूरी स्थिति को पुन: उत्पन्न करता है। – denis
हाँ - मांगने से पहले का परीक्षण नहीं किया है, बस थोड़ा सा bemused है कि इस मामले था - लगता है कि यह है .. हम्म .. सब कुछ के लिए भार के उपलब्ध कराने की कमी, यकीन नहीं है कि इस के लिए एक साफ समाधान है ... – Nim