2012-09-18 90 views
2

這給出了一個例外bad_lexical_cast:的std :: string到中int8_t

int8_t i = boost::lexical_cast<int8_t>("12"); 

我想有當值不適合在int8_t異常。

我該怎麼做?如果值超出範圍-128到127,我應該先投射到一個int並拋出一個異常?

我也有興趣將字符串轉換爲uint8_t。

+5

的'bad_lexical_cast'已經是一個例外,爲什麼不能趕上,然後如果你想,拋出自己的異常? – Nim

+0

當然,使用'int8_t'不是可移植的。它是「可選的」,即,實現不需要提供它。 –

回答

3

一個int8_tuint8_tlexical_cast被視爲炭。

你可以用numeric_cast結合lexical_cast得到你想要的東西:

#include <boost/numeric/conversion/cast.hpp> 
#include <boost/lexical_cast.hpp> 

using boost::lexical_cast; 
using boost::numeric_cast; 

numeric_cast<int8_t>(lexical_cast<int>("128")); 
numeric_cast<uint8_t>(lexical_cast<int>("256")); 
+0

酷!我現在可以編寫一個轉換函數,它引用所需類型的值以及要轉換的字符串。 – Baz