原創(chuàng) visualfc
boost::any的構(gòu)造函數(shù)不支持字符數(shù)組的直接賦值,即
boost::any a1("ok"); //error
boost::any a2 = "ok"; //error
是無法編譯通過的。
第一種方法是可以通過char*和std::string來進(jìn)行賦值。即:
char str[] = "ok";
boost::any a1(&str[0]);
boost::any a2 = std::string("ok");
第二種方法是通過修改boost::any源代碼來實(shí)現(xiàn)字符數(shù)組的直接賦值,實(shí)現(xiàn)思路是在boost::any的構(gòu)造函數(shù)中將字符數(shù)組轉(zhuǎn)換為字符指針, boost::any的構(gòu)造函數(shù)代碼如下:
template<typename ValueType>
any(const ValueType & value)
: content(new holder<ValueType>(value))
{
}
修改后代碼如下:
在boost/any.hpp中需要添加 #include <boost/type_traits/decay.hpp>
template<typename ValueType>
any(const ValueType & value)
: content(new holder<boost::decay<ValueType>::type>((boost::decay<ValueType>::type)value))
{
}
現(xiàn)在修改后的boost::any可以支持字符數(shù)組操作,如下:
boost::any a1("ok");
boost::any a2 = "ok";
char buf[] = "ok";
boost::any a3(buf);
boost::any a4 = buf;
char * c1 = boost::any_cast<char*>(a1);
char * c2 = boost::any_cast<char*>(a2);
當(dāng)然,本文的最終目的不是建議讀者去修改boost::any的源代碼,僅在于提供一種思路和方法以供參考。