私はテンプレートに新しくはありませんでしたが、私が作業しているデータシリアライザのテンプレート型をコンポーネントに分ける必要がある、説明するのは難しいので、私はそれを実証しました。テンプレートのインスタンス化に失敗しました:コンパイラが不適切なオーバーロード機能を選択しました
私の単純化された問題の例は、example.cppです。
template<typename T> void foo(T& arg) { }
template<typename T, typename V> void foo(T<V>& arg) { }
int main(int argc, char *argv[])
{
foo(argc);
return 0;
}
私は、エラーとそれらの一方のみが適切であるとき、両方機能をインスタンス化しようとして示しているようだ警告が表示されます。
$ g++ -Wall -W example.cpp
example.cpp:2:43: error: ‘T’ is not a template
template<typename T, typename V> void foo(T<V>& arg) { }
^
example.cpp: In instantiation of ‘void foo(T&) [with T = int]’:
example.cpp:6:11: required from here
example.cpp:1:34: warning: unused parameter ‘arg’ [-Wunused-parameter]
template<typename T> void foo(T& arg) { }
^~~
私の問題を解決する方法やこの混乱を防ぐ方法に関する提案はありますか?
誰もが、あなたの問題を生じ*最小限の*完全な例の縮図を投稿するためのおかげで、それを言及していません。あなたがそれを最小限に抑えることができたなら、私はどのように見えません。よく紹介されています。 – WhozCraig