mój kod Problem:C++ przeciążenie: string literal vs. boost :: function dwuznaczności
#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()()>&)
wiem mogę rozwiązać ten problem przez jawne wywołanie func (ciąg ("zły ")); lub przez zapewnienie func (const char *), ale zastanawiam się, czy istnieje sposób na zachowanie strony wywołującej, jak w przykładzie i bez wprowadzania większej liczby przeciążeń.
Może coś z doładowaniem :: enable_if? Dzięki za wszelkie wskazówki.
Czy naprawdę sądzisz, że przyczyną jest przeciążenie, które ma funkcję 'boost :: function', czy próbowałeś na przykład skompilować bez tego przeciążenia? Czy to będzie działało? – Nim
tak jest spowodowane przez funkcję boost :: function. Zamieszczony przeze mnie przykład odtwarza całą sytuację. – denis
yeah - nie testowałem przed pytaniem, tylko trochę oszołomiony, że tak było - wygląda na to, że jest .. hmm .. na krótko od zapewnienia przeciążenia dla wszystkiego, nie jestem pewien, czy jest na to porządne rozwiązanie ... – Nim