2

lexical_cast を使用するテンプレート化されたコードがあります。

ここで、すべての lexical_cast 呼び出しを削除したいと考えています (/clr ではうまく機能しないため)。

std::string とその値の間でオブジェクトをキャストする必要があります。

したがって、最初の方向は簡単です (T _from, std::string _to) :

std::ostringstream os;
os << _from;
_to =  os.str();

しかし、文字列から任意の型に一般的にそれを行う方法を考えることができません (テンプレートで動作する汎用的なものが必要です。各型の特殊化を使用して、のような関数を使用することはできませんatoi)

編集:

もちろん、反対方向に ostringstream を使用してみました。次のエラーが表示されます。

エラー C2784: 'std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &&,_Elem *)': 'std::basic_istream<_Elem, _Traits> &&' 'std::ostringstream' から

4

1 に答える 1

3

lexical_castは両方向でストリーミングを使用<<>>、同じことができます:

std::stringstream sstr;
sstr << _from;
sstr >> _to;

ただし、サニティチェックを必ず含めてください。

于 2011-07-31T11:00:29.863 に答える