私はこのようなコードを見てきました:
#include <iostream>
// member_function_templates.cpp
struct X
{
template <class T> void mf(T* t) {
std::cout << "in mf t is: " << *t << std::endl;
}
};
int main()
{
int i = 5;
X* x = new X();
x->mf(&i); //why can this be called without specifying a type as in: x->mf<int>(&i) ??
}
私の質問は、メインのコメントにあります。なぜあなたは呼ぶことができます:
x->mf(&i);
...タイプを指定せずに?直感はそれが次のように呼ばれるべきであると言います:
x->mf<int>(&i);
...しかし、どうやらこのように呼び出す必要はないようです(上記は、テンプレートを明示的に指定せずに、どちらの方法でもgcc 4.7でコンパイルします)。
また、テンプレートの型を指定せずに呼び出すと、(テンプレート関数定義の)Tの型はどうなりますか?(デフォルトでは、引数として関数mfに渡すもののタイプになっていると思いますが、これがどのように機能するかについてさらに説明するとよいでしょう)