1
我想调用类模板中对象的成员函数,但是我无法获得以下代码来编译。我发现一个帖子here,说我可以使用object.template method<T>();
。调用模板成员函数
使用MSVC 2015年,我得到错误C2059:语法错误: '模板'
#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;
}
正如所写,Bar似乎没有任何模板化的成员函数。 –
您提供的链接仅在被调用的成员函数是模板成员函数时才有用,该函数是* not *。实际上,'printX'既不是模板成员函数,也不是类模板的成员('Bar'不是模板类)。简而言之,该链接与您实际遇到的任何问题无关。 – WhozCraig