テンプレート化されたメンバー関数について少し混乱しています。次のようなテンプレート化されたメンバー関数を持つ奇妙な構造体があるとしましょう。
struct Foo
{
template <typename T> void f(T t) {};
};
次に、その構造体をいくつかの標準コンテナに格納します。
std::vector<Foo> V;
V.push_back(Foo());
V.push_back(Foo());
V.push_back(Foo());
V.push_back(Foo());
次; テンプレート化されたメンバー関数のさまざまなインスタンスを呼び出しましょう。
V.at(0).f<int>(1);
V.at(0).f<char>(2);
V.at(1).f<float>(3.4f);
V.at(2).f<double>(5.6);
V.at(3).f<long>(7);
そして最後に、質問:
¿Fooクラスのすべてのインスタンスは同じクラスからのものですか?答えはイエスのようですが...最初のFooインスタンスには、最後にfメンバー関数の2つのオーバーロードがあります。
[0] Foo::f(int t);
[0] Foo::f(char t);
一方、他のFooインスタンスには、f関数のバージョンが1つしかないようです。そのため、メンバー関数の違いにより、各インスタンスの基本タイプが異なるようです。
[1] Foo::f(float t);
[2] Foo::f(double t);
[3] Foo::f(long t);
¿f関数はどこにインスタンス化されますか?Foo :: f(int t)関数のアドレスは、最初のFooインスタンスからのみ取得できるようです。これは、その関数がそのインスタンスにのみ属しているためです。他の機能についても同じです。
前もって感謝します。