让boost::any支持字符数组赋值



boost::any构造不支持直接赋值
boost::any a1("ok"); //error
boost::any a2 = "ok"; //error
是无法编译通过

种思路方法是可以通过char*和std::来进行赋值即:
char str = "ok";
boost::any a1(&str[0]);
boost::any a2 = std::("ok");

第 2种思路方法是通过修改boost::any源代码来实现直接赋值实现思路是在boost::any构造中将转换为指针 boost::any构造代码如下:
template<typename ValueType>
any(const ValueType & value)
: content( holder<ValueType>(value))
{
}
修改后代码如下:
在boost/any.hpp中需要添加 # <boost/type_traits/decay.hpp>

template<typename ValueType>
any(const ValueType & value)
: content( holder<boost::decay<ValueType>::type>((boost::decay<ValueType>::type)value))
{
}
现在修改后boost::any可以支持操作如下:
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);

当然本文最终目不是建议读者去修改boost::any源代码仅在于提供种思路和思路方法以供参考
Tags: 

延伸阅读

最新评论

发表评论