请问怎么比较两个boost:any类型是否相等
请教如何比较两个boost::any类型是否相等?
请问如何判断obj1是否和obj2相等呢?改写boost::any文件也可以。我觉得判断any::content内容是否相等是比较可行的,我将其改为了public类型,这样内部数据就可以对外暴露。但内部该如何修改我就不太清楚了,水平有限,希望高手帮忙看看。
------解决方案--------------------
不要通过修改库源代码来满足你的需求,尽量自己扩展库。
另外: 读boost::any时,你需要提供其中的类型。
------解决方案--------------------
any只是一个包装,不知道类型无法使用,当然不可能比较。
------解决方案--------------------
就是因为any必须是非模板才用了模板holder继承placeholder,any根本不知道自己保存的类型,最多只能用type()来获取typeid
如果允许修改any的源码,可以尝试在holder中加入与holder类型的==判断(虚函数),先判断typeid是否相等,相等则在placeholder中cast后比较
然后在any里调用holder的==判断
bool IsEqual(boost::any obj1, boost::any obj2)
{
return obj1 == obj2;
}
请问如何判断obj1是否和obj2相等呢?改写boost::any文件也可以。我觉得判断any::content内容是否相等是比较可行的,我将其改为了public类型,这样内部数据就可以对外暴露。但内部该如何修改我就不太清楚了,水平有限,希望高手帮忙看看。
------解决方案--------------------
不要通过修改库源代码来满足你的需求,尽量自己扩展库。
另外: 读boost::any时,你需要提供其中的类型。
template<typename T>
bool IsEqual(boost::any obj1, boost::any obj2)
{
try
{
return any_cast<T>(obj1) == any_cast<T>(obj1);
}
catch(const boost::bad_any_cast &)
{
//return false;
}
//return obj1 == obj2;
return false;
}
------解决方案--------------------
any只是一个包装,不知道类型无法使用,当然不可能比较。
------解决方案--------------------
就是因为any必须是非模板才用了模板holder继承placeholder,any根本不知道自己保存的类型,最多只能用type()来获取typeid
如果允许修改any的源码,可以尝试在holder中加入与holder类型的==判断(虚函数),先判断typeid是否相等,相等则在placeholder中cast后比较
然后在any里调用holder的==判断