文字列をareboost::uint64_t
の内容に変換しようとしています。私が現在使用しているコードは次のとおりです。pvalue
12345678901234567890
void setAttribute(EnumAttrTyoe pname, const void *pvalue) {
if (pname == SESS_ID) {
const char *raw_sess_id = reinterpret_cast<const char*>(pvalue);
std::string str_sess_id(raw_sess_id);
std::cout << "Trying to open session id: '" << str_sess_id << "'\n";
m_session_id = boost::lexical_cast<unsigned long long>(str_sess_id);
}
}
これは、「不適切なレキシカル キャスト: ソース タイプの値をターゲットとして解釈できませんでした」というメッセージで例外をスローします。代わりにこのコードを使用する場合:
void setAttribute(EnumAttrTyoe pname, const void *pvalue) {
if (pname == SESS_ID) {
const char *raw_sess_id = reinterpret_cast<const char*>(pvalue);
std::string str_sess_id(raw_sess_id);
std::stringstream ss;
ss << raw_sess_id;
ss >> m_session_id;
}
}
通過しますが、 の値m_session_id
は 0 です。 のフラグはまだチェックしていませんss
が、失敗したことを知るために天才である必要はありません。今何をすべきか?
更新C++ 11は使用できません。コンパイラはVC ++ 2008で、バージョン1.43.0をブーストしています。