最も基本的な型を文字列に変換するテンプレート化された関数を提供したいと考えています。これまでのところ、私が思いついた最高のものは次のとおりです。
template<typename T> inline std::string anyToString(const T& var) {
std::ostringstream o;
o << var;
return o.str();
}
この関数は、たとえば次の目的で使用できます。
class TimeError:public std::runtime_error{
public:
explicit TimeError(int time):std::runtime_error(anyToString(time)),
mTime(time){};
protected:
int mTime;
};
anyToString および同様の関数の問題は、gcc バージョン 4.4.3 -Wall -Wexta -Werror でコンパイルするときにあいまいな警告が生成されることです
"ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second
。
私の知る限り、警告の理由は <<.
これらのあいまいさは、主に次のような他のテンプレートによって生成されます。
template<typename T>
T& operator<<(T& out, const SymRad& angle){
return out << angle.deg();
}
ただし、これらには、複数のストリーム タイプで機能するなど、他の利点があります。だから私はそれらを維持したいと思います。2 番目のテンプレートを ostream などの単純なメソッドにすると、あいまいさが解消されますが、sth を探しています。これにより、両方のテンプレートを保持できます。説明されているオプションを使用して警告を生成することなく、同じ単純さを提供する汎用関数はありますか? そうでない場合、発行された警告をローカルで無効にする最善の方法は何ですか?