我正在基于boost::ptree
和boost::lexical_cast
编写C ++ opensource project for configuration loading(来自xml和json之类的树数据结构)。
为了允许从Tree
结构到任何原始或用户定义类型的隐式转换,我已经
添加了转换运算符模板:
template<class Type>
operator Type() const {
return boost::lexical_cast<Type>(this->toString());
}
这适用于boost :: ptree处理的类型。对于所有其他类型,用户可以 专门化这个模板:
namespace swiftree {
template<>
Tree::operator Vector3() const {
Vector3 ret;
ret.x = value<float>("x");
ret.y = value<float>("y");
ret.z = value<float>("z");
return ret;
}
}
因此用户可以这样做:
Vector3 position = tree["position"];
使用这种技术有什么缺点吗?是否有更好的替代方法来实现相同的目标?