Ich versuche, einen spezialisierten Konstruktor für std::string
Argumente zu erstellen, aber der andere wird immer verwendet, wenn ich es mit einem String-Argument aufrufen. C++ - Konstruktor Vorlage Spezialisierung
struct Literal : Expression
{
template <typename V>
Literal(V val)
{
value = val;
}
};
template <>
Literal::Literal(std::string const& val)
{
value = val.c_str();
}
Es spielt keine Rolle, ob innerhalb der Klasse definiert werden, die beide außerhalb der Klasse, oder wie in dem entsandten Beispiel nur die Spezialisierung außerhalb der Klasse definiert ist: Wenn sie mit std::string
genannt, die Zuordnung value = val
gibt ein Compilerfehler
Wie spezialisiere ich diese Konstruktorvorlage für std::string
richtig?
Sie nicht erklären 'value'. Dies ist der Fehler, den Sie erhalten: _main.cpp: 12: 9: error: 'value' wurde in diesem Bereich nicht angegeben value = val; _ –
@HenriqueBarcelos 'ATL :: CComVariant value' wird in' Expression' deklariert . Ich habe nur die relevanten Vorlagen zur Verfügung gestellt. –
Ich nehme an, "Wert" ist in der Basisklasse definiert. – Bathsheba