Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换运算符模板:安全性和可用性 我写了一个C++(从树数据结构,如XML和JSON),基于 Boo::pTruts和 Boo::_C++_Templates_Boost_Operator Overloading - Fatal编程技术网

转换运算符模板:安全性和可用性 我写了一个C++(从树数据结构,如XML和JSON),基于 Boo::pTruts和 Boo::

转换运算符模板:安全性和可用性 我写了一个C++(从树数据结构,如XML和JSON),基于 Boo::pTruts和 Boo::,c++,templates,boost,operator-overloading,C++,Templates,Boost,Operator Overloading,为了允许从树结构隐式转换为任何原语或用户定义的类型,我 添加了转换运算符模板: template<class Type> operator Type() const { return boost::lexical_cast<Type>(this->toString()); } namespace swiftree { template<> Tree::operator Vector3() const { Vector3 ret;

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

template<class Type>
operator Type() const {
    return boost::lexical_cast<Type>(this->toString());
}
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;
}
}

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

Boost ptree已经有了类似的功能。看看你可以为你需要的所有类型添加翻译器这个项目背后的想法是有一种比ptree更简洁的方式来获取数据<代码>转换器\u介于之间似乎是操作员模板的替代品。。。但为什么更好呢?这可能取决于需要和意见。我故意只写了一条评论,因为我不想说是好是坏。使用标准<>代码pTruts>代码,我很好,根据您的需求,您的代码>操作符< /C> >方法可能是更好的,C++社区中的许多人已经逐渐变成“隐式转换是邪恶的”。它们经常造成重载解析和泛型代码混乱
Vector3 position = tree["position"];