ファイルから 1D/2D/3D ポイントをロードする関数を実装したいと思います... テンプレート パラメータ Point は、1D 2D 3D ポイントにすることができます。
template <typename Point>
void List <Point> ::load ( const char *file)
{
...
for ( unsigned int i = 0; i < file.size(); i++ )
{
if ( file[i].size() == 1 )
{
items.push_back( Point ( atof ( file[i][0].c_str() ) ) );
}
else if ( file[i].size() == 2 )
{
items.push_back( Point ( atof ( file[i][0].c_str() ), atof ( file[i][1].c_str() ) ) );
}
else if ( file[i].size() == 3 )
{
items.push_back(Point ( atof ( file[i][0].c_str() ), atof ( file[i][1].c_str() ), atof ( file[i][2].c_str() ) ) );
}
}
}
この関数を 2D ポイントに対して実行すると、2D ポイントには 3 つのパラメーターを持つコンストラクターがありません。3Dポイントでも同じ状況が発生します...
List <Point2D> list1;
list1.load("file"); //Error
List <Point3D> list2;
list2.load("file"); //Error
Error 275 error C2661 : no overloaded function takes 3 arguments
Error 275 error C2661 : no overloaded function takes 2 arguments
そのような機能を効率的に設計するにはどうすればよいでしょうか? 構文はいくらか単純化されていますが、これは説明のための例にすぎません。