1

次のような行を実装するために、ラッパーのレキシカルキャスト関数をどのように書くことができますか?

int value = lexical_cast<int> (string)

私はプログラミングにまったく慣れていないので、関数をどのように記述できるか疑問に思っていました。テンプレートの作り方がわかりません。また、 double のラッパー関数も作成できますか? お気に入り

double value = lexical_cast2<double> (string)

??

4

4 に答える 4

6

あなたの例で述べたようにするには:

#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";
        }
    }
于 2013-04-02T21:29:07.870 に答える
1

これが演習ではなく、目的が単に文字列を他の型に変換することである場合:

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() );
于 2013-04-02T21:33:58.847 に答える
0

このヘッダーを簡単に使用できます。to<std::string>(someInt)またはのようなものを書きto<unsigned byte>(1024)ます。2番目の部分は、あなたが悪いことをしていることをスローして伝えます。

于 2014-06-06T09:43:37.427 に答える