似たような質問がたくさんあることを認識していますが、私の問題を解決するものは見つかりませんでした(読んでください: printVariable(mapping.begin());
テンプレート化されたクラスの引数を持つテンプレート付き関数
これは動作しますが、今私はまた、AA map<string, int*>
を持ってしたい:私は次の操作を行うことができますmap<string, bool*> mapping
をお持ちの場合は今
void printVariable(map<string, bool*>::iterator it)
{
cout << it->first << " " << *(it->second) << endl;
}
:私の場合)
に私は、次の機能を持っていますその人をすることができる同じので、私は、私はprintVariable機能変更考え出し:
template <typename T>
void printVariable(map<string, T*>::iterator it)
{
cout << it->first << " " << *(it->second) << endl;
}
をただし、これはエラー(GCC)をコンパイルできます:
error: variable or field 'printVariable' declared void
error: expected ')' before 'it'
私は機能をオーバーロードすることで、この非常に簡単回避することができますね。しかし、私は上記がうまくいかない理由を知りたいです。
EDIT2:削除されたテキストは、適切なソリューションが間違っていたと主張
イテレータはテンプレート型の従属型なので、型名指定子をパラメータに追加する必要がありますか? 'void printVariable(typename map :: iterator it)' –