Überladung mit std::shared_ptr und int ungültig
-
Hallo,
ich habe einen generischen Datencontainer dem man mit einer Methode bind verschiedene Schlüssel-/Wertepaare hinzufügen kann.
virtual void bind(std::string name, std::shared_ptr<SomeRandomDataClass> value) = 0; virtual void bind(std::string name, int value) = 0;
GCC meint an dieser Stelle, die Überladungen wären uneindeutig. Lässt sich ein Verhalten erzwingen, bei dem jeder numerische Wert als int interpretiert wird und nur explizite shared_ptr-Übergaben als shared_ptr interpretiert werden?
Vielen Dank
-
Überlad-o-Mat schrieb:
Hallo,
virtual void bind(std::string name, std::shared_ptr<SomeRandomDataClass> value) = 0; virtual void bind(std::string name, int value) = 0;
Das Problem liegt wahrscheinlich an einer anderen Stelle. Ich hatte mich schon gewundert weshalb das nicht funktioniert und ein kleines Testprogramm
#include <iostream> #include <memory> struct A { virtual void f(std::string name, std::shared_ptr<int> ptr) = 0; virtual void f(std::string name, int i) = 0; }; struct B : A { void f(std::string name, std::shared_ptr<int> ptr) override { std::cout << "ptr" << std::endl; } void f(std::string name, int i) override { std::cout << "int" << std::endl; } }; int main() { B b; b.f("", 0); b.f("", std::shared_ptr<int>()); }
... gibt bei mir unter GCC 4.8.1 wie auch unter MSVC13 wie erwartet
`int
ptr`
aus. Vielleicht postest du mal deine Funktionsaufrufe von
bind()
. Eininstanz.bind("name", new SomeRandomDataClass());
z.B. kann nicht funktionieren, da der Konstruktor vonshared_ptr
, der einen Pointer akzeptiert alsexplicit
deklariert ist.Gruss,
Finnegan
-
OMG wie peinlich, der Fehler war ein fehlendes Inklude auf die im Shared-Ptr übergebene Datenklasse.
Ich habe mich nur durch die Fehlermeldung verwirren lassen.Danke dir, dass du die Zeit investiert hast...