我試圖得到這個工作模板函數:其只接受字符串或算術
template<class Type>
typename boost::enable_if< boost::mpl::or_<
boost::is_arithmetic<Type>,
is_string<Type> > >::type
get(const std::string &argPath, const Type &argDefault) {
bool caught = false;
std::stringstream ss;
Type value;
try {
value = ptree_.get<Type>(argPath);
} catch(ptree_bad_path &e) {
caught = true;
}
if(caught)
value = argDefault;
ss << value;
parameters_.insert(std::pair<std::string, std::string>(argPath, ss.str()));
return value;
}
我用下面的IS_STRING型特點:Type trait for strings
我的目標是我的Type
限制字符串或算術類型,以便我可以將它推到我的stringstream
。
所以這個版本,但是當我嘗試使用它,它返回以下錯誤:
error: void value not ignored as it ought to be
In member function ‘typename boost::enable_if, is_string, mpl_::bool_, mpl_::bool_, mpl_::bool_ >, void>::type FooClass::get(const std::string&, const Type&) [with Type = uint8_t]’
error: return-statement with a value, in function returning 'void'
這裏是我嘗試使用它:
FooClass f;
item_value = f.get("tag1.tag2.item", DEFAULT_ITEM_VALUE);
任何幫助表示讚賞,提前致謝!
你說得對,它現在按預期工作!非常感謝,你做了我的一天! – Syffys