免責事項:次の質問はおそらくとても簡単で、私は最初の答えを見てショックを受けるかもしれません。さらに、重複した質問についてはお詫びしたい。構文上の問題は、口頭での説明であることを特定するのが必ずしも容易ではないので、それらを検索するのは簡単ではない...テンプレートクラス内のテンプレート関数を呼び出す
しかし、 2つのテンプレートクラスがあり、そのうちの1つにテンプレートメンバー関数があり、もう1つのクラスはその関数を呼び出そうとします。最小限、エラー製造例を以下に示す:コンパイル時に
#include <iostream>
template <typename T>
class Foo {
public:
Foo() {
}
template <typename outtype>
inline outtype bar(int i, int j, int k = 1) {
return k;
}
};
template <typename T>
class Wrapper {
public:
Wrapper() {
}
double returnValue() {
Foo<T> obj;
return obj.bar<double>(1,2); // This line is faulty.
}
};
int main() {
Wrapper<char> wr;
double test = wr.returnValue();
std::cout << test << std::endl;
return 0;
}
、これはすべてのエラーメッセージがコードでマークリンケに向けられ
expected primary-expression before 'double'
expected ';' before 'double'
expected unqualified-id before '>' token
もたらします。
あなたのアイデアは、どれほど明白であっても、私はすでにあなたに感謝しています。
設定が推測できないため、明示的な資格が必要です。テンプレートがなければ、構文エラーが発生します。なぜなら、演算子は以下のように認識されるからです....「13.6。Stroustrup、spec。edition。935-936」のlanguage authorの観点も参照してください。 – bruziuz