转换运算符模板:安全性和可用性

时间:2014-10-24 09:58:10

标签: c++ templates boost operator-overloading

我正在基于boost::ptreeboost::lexical_cast编写C ++ opensource project for configuration loading(来自xml和json之类的树数据结构)。

为了允许从Tree结构到任何原始或用户定义类型的隐式转换,我已经 添加了转换运算符模板:

template<class Type>
operator Type() const {
    return boost::lexical_cast<Type>(this->toString());
}

full code here

这适用于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"];

使用这种技术有什么缺点吗?是否有更好的替代方法来实现相同的目标?

0 个答案:

没有答案