クラステンプレート内のオブジェクトのメンバ関数を呼び出そうとしていますが、次のコードをコンパイルできません。私はobject.template method<T>();
を使用できると言った投稿hereを見つけました。 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にはテンプレート化されたメンバー関数がないようです。 –
あなたが提供したリンクは、呼び出されているメンバ関数がテンプレートメンバ関数である場合にのみ関連します。実際、 'printX'はテンプレートメンバ関数でも、クラステンプレートのメンバでもありません(' Bar'はテンプレートクラスではありません)。要するに、そのリンクはあなたが実際に抱えている問題とは関係ありません。 – WhozCraig