小编Tot*_*son的帖子

如何使用 POCO 解析 xml 文件并将特定节点提取到 std::string?

我想使用 POCO 的库提取单个节点,但不知道该怎么做。我是 XML 的新手。

XML 本身看起来像这样(缩写):

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created by XMLPrettyPrinter on 11/28/2012 from  -->
<sbml xmlns = "http://www.sbml.org/sbml/level2/version4" level = "2" version = "4">
<model id = "cell">
  <listOfSpecies>
</listOfSpecies>
  <listOfParameters>
     <parameter id = "kk1" value = "1"/>
  </listOfParameters>
  <listOfReactions>
     <reaction id = "J1" reversible = "false">
... much stuff here ..
  </listOfReactions>
</model>
</sbml>
Run Code Online (Sandbox Code Playgroud)

我想提取 listOfReactions 节点中的所有内容并将其存储在 std::string 中,以便稍后进行 MD5 散列。

我试过这个:

ifstream in(JoinPath(gTestDataFolder, "Test_1.xml").c_str());
InputSource src(in);
DOMParser parser;
AutoPtr<Document> pDoc = parser.parse(&src);
NodeIterator it(pDoc, …
Run Code Online (Sandbox Code Playgroud)

c++ xml poco xml-parsing sbml

2
推荐指数
1
解决办法
1万
查看次数

如何使转换运算符返回参考和非参考

我有一个模板类,看起来像:

template<class T>
class A
{
  public:
     operator T() const {  return value;}
     operator T&() { return value;}

  private:
       T value;

}
Run Code Online (Sandbox Code Playgroud)

似乎从未调用过operatorT()const。即使在这样的陈述中

const int a = myA;
Run Code Online (Sandbox Code Playgroud)

其中myA是A的实例。上述代码缺少某些地方吗?

c++ templates

2
推荐指数
1
解决办法
154
查看次数

如何将shared_ptr <A>转换为shared_ptr <B>,其中B是从A派生的?

我有一个std :: list容器,持有类A的共享指针.我有另一个类,比如B,它是从A派生的.

我目前有代码来填充容器:

shared_ptr<B> b = shared_ptr<B>(new B);
container.push_back(b)
Run Code Online (Sandbox Code Playgroud)

这很好用.

问题是,如何检索最初被推回容器的shared_ptr <B>?

执行以下操作

   list<shared_ptr<A> >::iter anIter = myContainer.begin();
   shared_ptr<B> aB = *(anIter);
Run Code Online (Sandbox Code Playgroud)

不编译.我收到错误

Cannot convert 'A * const' to 'B *'
Run Code Online (Sandbox Code Playgroud)

有小费吗?

c++ inheritance shared-ptr

2
推荐指数
2
解决办法
204
查看次数

使用NSIS将应用程序文件安装到标准Windows用户

我有一个需要SQLite DB才能运行的应用程序.在我的NSIS脚本中,数据库被复制到用户Local/AppData文件夹.如果安装程序的用户是管理员用户,则此工作正常.

但是,如果标准用户尝试安装程序,安装程序会要求输入管理员密码(因为标准用户无法在Windows上安装程序)并且用户安装现在正在切换到管理员,导致数据库安装在管理员Local/AppData文件夹而不是实际用户AppData文件夹.

因此,实际上,当标准用户尝试运行程序时,它无法找到数据库.

我不知道如何处理这种情况(最好的做法,如果有的话),并找不到回答它的问题.

安装程序是否应该将数据库放入公共场所(如AllUsers)并在第一次运行时将数据库从那里复制到自己的AppData文件夹中?

allusers文件夹的问题在我看来是任何人都可以窥视它并可能删除文件.

windows installation nsis

2
推荐指数
1
解决办法
829
查看次数

替换和更改程序变量的大小写

我在一些源代码文件中改变了一些符号.

特别是,使用格式的变量名称

m_variable1
m_anothervariable
Run Code Online (Sandbox Code Playgroud)

应重命名并重新格式化为

mVariable1
mAnotherVariable
Run Code Online (Sandbox Code Playgroud)

也就是说,用m替换m_并使下一个字符为大写.

我知道如何简单的替换,像

%s/m_/m/gc 
Run Code Online (Sandbox Code Playgroud)

使用vim,但不确定如何在替换语句中添加将char更改为大写的语法?

vim

1
推荐指数
1
解决办法
40
查看次数

在Python中打印键值对时如何按字段对齐打印输出

我想打印Python配置解析器对象的内容。

以下代码

for section in system_config.config.sections():
    print ("\n[" + section + "]")
    for (key, value) in system_config.config.items(section):
          print(key + "=" + value)
Run Code Online (Sandbox Code Playgroud)

版画

[GENERAL]
data_roots=[["c:\\data", "/data"] , ["d:\\data2", "/data2"]] 
test_data_folder=c:\data\atp-test-data
mount_render_python_apps=false
mount_render_modules=false
host_memory=24
host_number_of_cores=4
at_core_threads=15
Run Code Online (Sandbox Code Playgroud)

为了提高可读性,以下内容是可取的:

[GENERAL]
data_roots                = [["c:\\data", "/data"] , ["d:\\data2", "/data2"]] 
test_data_folder          = c:\data\atp-test-data
mount_render_python_apps  = false
mount_render_modules      = false
host_memory               = 24
host_number_of_cores      = 4
at_core_threads           = 15
Run Code Online (Sandbox Code Playgroud)

在C ++中,可以通过在使用流运算符“ <<”时设置第一个字段的“宽度”来实现。

问题是,如何使用Python做到这一点?

python

0
推荐指数
1
解决办法
45
查看次数

如何执行函数 x% 的执行次数?

用例:实时提供实时图像并在屏幕上查看。为了降低 CPU 负载,用户应该能够丢弃图像并只显示 10% 或 50% 的图像。

如果用户选择 50%,那么应该显示每隔一个图像(不是连续显示 50 个图像,然后丢弃 50 个,因为那也是 50%。)

当前代码:

void paintImage(int everyWhatImage)
{
    showImage();
}
Run Code Online (Sandbox Code Playgroud)

100% 显示图像。

如果用户提供一个整数,比如 1,2,3 ..,意思是每一个、每一秒、每三个等等,可以使用像这样熟悉的东西:

void paintImage(int everyWhatImage)
{   
  if(counter % everyWhatImage)
  {
     showImage();
  }
  counter++;
}
Run Code Online (Sandbox Code Playgroud)

然而,上述算法不支持显示少于 50%('2')的图像,所以问题是,如何做到这一点?

由于这是一个实时流媒体应用程序,因此需要速度快。

另外,上面的代码是在回调函数中执行的,所以不知道什么时候执行。

c++ algorithm

0
推荐指数
1
解决办法
71
查看次数