このような質問が他にもあることは知っていますが、あまり明確ではありません。
私はすでに答えを持っていると確信しているので、これはばかげた質問のように感じますが、とにかく質問させてください。
したがって、基本的には文字列を受け取り、適切な変数の型に基づいて次のように変換する関数があります。
template<class T>
void ConvertValue(std::string str, T &variable)
{
variable = static_cast<T>(str);
}
これで問題ないようですよね?しかし、問題は、文字列を int または float に変換することはできないため、int と float、および変換できない他の型に対してテンプレートの特殊化を行う必要があるため、私が求めているのは、このようなもの:
void ConvertValue(std::string str, int &variable) { variable = atoi(str.c_str()); }
void ConvertValue(std::string str, float &variable) { ... }
void ConvertValue(std::string str, double &variable) { ... }
void ConvertValue(std::string str, std::vector<int> &variable) { ... }
..等
または、テンプレートの特殊化を使用する必要がありますか? どちらがより理にかなっていますか?ほとんどの型には独自の変換関数があるため、関数のオーバーロードに傾いています。関数のオーバーロードはわずかに異なるため、論理的には意味がありますが、何か不足しているかどうかはわかりません。
関数のオーバーロードに固執する必要がありますか? または、テンプレートの専門化に切り替えますか?