我该如何转换Qt的QVariant来 boost::: any?
最佳答案
我不认为有一种简单的方法,我会执行以下操作:
boost::any qvariant_to_any(const QVariant& v) {
switch(v.userType()) {
case QVariant::Bool:
return boost::any(v.value<bool>());
//or: return boost::any(v.toBool());
case QVariant::Int:
return boost::any(v.value<int>());
//or: return boost::any(v.toInt());
case QVariant::UInt:
return boost::any(v.value<unsigned>());
// ...
// all your types which store in a QVariant in your use case
case QVariant::Invalid:
default:
throw std::bad_cast(); //or return default constructed boost::any
}
}
如果Boost.Variant可以代替Boost.Any来完成这项工作,那么在德国杂志上有一篇很好的文章介绍了如何将QVariant转换为Boost.Variant,反之亦然。
德语文章:http://www.heise.de/developer/artikel/Konvertierungen-992950.html
来源:ftp://ftp.heise.de/pub/ix/developer/elfenbein.zip