次のような行を実装するために、ラッパーのレキシカルキャスト関数をどのように書くことができますか?
int value = lexical_cast<int> (string)
私はプログラミングにまったく慣れていないので、関数をどのように記述できるか疑問に思っていました。テンプレートの作り方がわかりません。また、 double のラッパー関数も作成できますか? お気に入り
double value = lexical_cast2<double> (string)
??
次のような行を実装するために、ラッパーのレキシカルキャスト関数をどのように書くことができますか?
int value = lexical_cast<int> (string)
私はプログラミングにまったく慣れていないので、関数をどのように記述できるか疑問に思っていました。テンプレートの作り方がわかりません。また、 double のラッパー関数も作成できますか? お気に入り
double value = lexical_cast2<double> (string)
??
あなたの例で述べたようにするには:
#include <sstream>
template <class Dest>
class lexical_cast
{
Dest value;
public:
template <class Src>
lexical_cast(const Src &src) {
std::stringstream s;
s << src;
s >> value;
}
operator const Dest &() const {
return value;
}
operator Dest &() {
return value;
}
};
エラー チェックを含む:
template <class Src>
lexical_cast(const Src &src) throw (const char*) {
std::stringstream s;
if (!(s << src) || !(s >> value) || s.rdbuf()->in_avail()) {
throw "value error";
}
}
これが演習ではなく、目的が単に文字列を他の型に変換することである場合:
C++11 を使用している場合は、新しい変換関数があります。
だからあなたは次のようなことができます
std::stoi -> int
std::stol -> long int
std::stoul -> unsigned int
std::stoll -> long long
std::stoull -> unsigned long long
std::stof -> float
std::stod -> double
std::stold -> long double
http://www.cplusplus.com/reference/string/
C++ 11でない場合は、使用できます
int i = atoi( my_string.c_str() )
double l = atof( my_string.c_str() );
このヘッダーを簡単に使用できます。to<std::string>(someInt)
またはのようなものを書きto<unsigned byte>(1024)
ます。2番目の部分は、あなたが悪いことをしていることをスローして伝えます。