Ich versuche, eine Elementfunktion eines Objekts in einer Klassenvorlage aufzurufen, aber ich kann den folgenden Code nicht zum Kompilieren abrufen. Ich habe einen Post here gefunden, der besagt, dass ich object.template method<T>();
verwenden kann.Aufrufen von Vorlagenelementfunktionen
MSVC Mit 2015 erhalte ich Fehler C2059: Syntaxfehler: 'template'
#include <iostream>
class Bar
{
public:
Bar() : m_x(0.f) { }
~Bar() { }
void setX(double x) { m_x = x; }
void printX(void) { std::cout << m_x << std::endl; }
private:
double m_x;
};
template <class T>
class Foo
{
public:
Foo() { }
~Foo() { }
void setBar(T bar) { m_bar = bar; }
void printBar(void) { m_bar.template printX<T>(); } // This is the issue
private:
T m_bar;
};
int main()
{
Bar bar;
bar.setX(20.f);
bar.printX();
Foo<Bar> foobar;
foobar.setBar(bar);
foobar.printBar();
return 0;
}
Wie geschrieben, scheint Bar keine Vorlagenfunktionen zu haben. –
Der von Ihnen angegebene Link ist nur relevant, wenn die aufgerufene Memberfunktion eine Template-Member-Funktion ist, die Ihre * nicht * ist. Tatsächlich ist 'printX' weder eine Template-Member-Funktion noch ein Member einer Klassenvorlage (' Bar' ist keine Template-Klasse). Kurz gesagt, dieser Link ist nicht relevant für jedes Problem, das Sie tatsächlich haben. – WhozCraig