好的,首先,我不是一个C++开发人员; 我已经设法把一些东西放在一起,它工作正常,但我确信通过专家的眼睛,它看起来像垃圾=)
所以我有一个免费软件应用程序,我使用Boost库中的Property Tree.我使用"使用多字节字符集"设置开发了整个应用程序(在VS2010中).我决定是时候通过并更新应用程序以支持Unicode,因为有些人有复杂的字符集,我想更好地支持.
我经历了一个繁琐的过程,即更改所有引用和调用以使用宽字符串,所有必要的转换.但是,我完全难以理解,我留下的唯一两个编译器错误.
它们都来自stream_translator.hpp(/ boost/property_tree /),第33和36行(如下所示):
template <typename Ch, typename Traits, typename E, typename Enabler = void>
struct customize_stream
{
static void insert(std::basic_ostream<Ch, Traits>& s, const E& e) {
s << e; //line 33
}
static void extract(std::basic_istream<Ch, Traits>& s, E& e) {
s >> e; //line 36
if(!s.eof()) {
s >> std::ws;
}
}
};
Run Code Online (Sandbox Code Playgroud)
第33行的错误是:
Error 347 error C2679: binary '<<' : no operator found which takes a right-hand operand of type …Run Code Online (Sandbox Code Playgroud) 好的,这里是XML结构的示例:
<config>
<Ignored>
<Ignore name="Test A">
<Criteria>
<value>actual value</value>
</Criteria>
</Ignore>
<Ignore name="Test B">
<Criteria>
<value>actual value</value>
</Criteria>
</Ignore>
</Ignored>
<config>
Run Code Online (Sandbox Code Playgroud)
我希望能够做两件事:
我是否必须删除该元素并重新创建它?我似乎无法找到一种方法来执行一个put,它通过一个属性(在那个级别上是唯一的)来限定一个元素(在同一级别有许多同名的元素).
就像是:
pt.put("config.Ignored.Ignore.<xmlattr>.name='Test A'.Criteria.value",some_var)
Run Code Online (Sandbox Code Playgroud)
或任何其他可以实现最终目标的东西.非常感谢你!
完全披露:我对C++很陌生,可能会遗漏一些明显的东西.