小编rco*_*yer的帖子

使用Boost Library程序选项的必需参数和可选参数

我正在使用Boost程序选项库来解析命令行参数.

我有以下要求:

  1. 一旦提供"帮助",所有其他选项都是可选的;
  2. 一旦未提供"帮助",则需要所有其他选项.

我怎么处理这个?这是我的代码处理这个,我发现它非常多余,我认为必须有一个容易做的,对吧?

#include <boost/program_options.hpp>
#include <iostream>
#include <sstream>
namespace po = boost::program_options;

bool process_command_line(int argc, char** argv,
                          std::string& host,
                          std::string& port,
                          std::string& configDir)
{
    int iport;

    try
    {
        po::options_description desc("Program Usage", 1024, 512);
        desc.add_options()
          ("help",     "produce help message")
          ("host,h",   po::value<std::string>(&host),      "set the host server")
          ("port,p",   po::value<int>(&iport),             "set the server port")
          ("config,c", po::value<std::string>(&configDir), "set the config path")
        ;

        po::variables_map vm;
        po::store(po::parse_command_line(argc, argv, desc), vm);
        po::notify(vm);

        if (vm.count("help"))
        {
            std::cout << desc << "\n";
            return false;
        }

        // There …
Run Code Online (Sandbox Code Playgroud)

c++ boost optional boost-program-options required

73
推荐指数
3
解决办法
4万
查看次数

Mathematica中的树数据结构

我主要使用mathematica作为数学工作台,并编写相对较小的ad-hoc程序.然而,我正在设计一个我打算在Mathematica中编程的系统.我需要将数据存储在树中,并搜索和遍历树.虽然我知道如何实现树,但我更喜欢标准的,经过测试的代码.我在Mathematica用户维基上查看了基本数据结构的类型.我没有找到,尽管Mathematica文档中有一个小例子.

现在问我的问题:

  1. 是否有可用的数据结构(开源)包?

  2. 您在数据结构方面使用了什么方法?逐步开发自己的util包?

(这不是一个问题,只是一个评论.也许......缺乏(大量可用的)开源软件包是Mathematica没有应有的动力的原因.我害怕鸡/蛋问题.)

wolfram-mathematica

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

了解链接器重复符号错误的来源

我有一个先前编译过的c ++程序,但是在使用Jamfiles之后,程序不再编译并ld发出了一个duplicate symbol error.在连续恢复到最初的Jamfiles,运行bjam clean,手动移除对象,并从gcc前端的clang切换到MacO 10.6.7上的gcc 4.2.1 之后,这种情况持续存在.

该程序的简化描述是有main.cpp四个文件,a.h,cpp并且b.h,cpp被编译成链接到的静态库main.o.两者,main.cpp并且b.cpp依赖于包含违规符号的文件off.h,通过两个不同的中间文件,但既不以任何方式a.h也不a.cpp依赖off.h.

你问之前,我确信,所有文件都被包裹在多个定义卫士(#ifndef,#define,#endif),虽然我没有发现失踪了他们一个文件,它并没有提及off.h.更重要的是,b.h不包括引用的任何内容off.h,只有实现,b.cpp引用任何引用off.h.仅此一点让我感到困惑.

为了增加我的困惑,我能够删除对off.hfrom 的引用,b.cpp并且正如预期的那样,它已成功重新编译.但是,当我添加引用时,它也成功编译,并在清除目标文件后继续这样做.我仍然不知道为什么它没有编译,特别是考虑到符号不应该有冲突,我已经阻止了符号重复,我已经摆脱了任何先前/不完整的构建.

由于我能够成功编译我的程序,我怀疑我是否能够重现它以测试任何建议.但是,我很好奇这是如何发生的,如果我将来遇到这种行为,除了我所做的以外什么,我可以做些什么来修复它?

c++ linker gcc clang

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

在工作完成后立即删除boost :: thread对象的最佳方法是什么?

boost::thread使用new运算符创建对象并继续而不等待此线程完成其工作:

void do_work()
{
    // perform some i/o work
}

boost::thread *thread = new boost::thread(&do_work);
Run Code Online (Sandbox Code Playgroud)

我想,有必要删除thread工作完成时.没有明确等待线程终止,最好的方法是什么?

c++ multithreading boost boost-thread

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

如何合并/更新boost :: property_tree :: ptree?

我已经阅读了boost :: property_tree的文档,但没有找到更新或合并ptree与另一个ptree的方法.我该怎么做呢?

鉴于下面的代码,update_ptree函数将如何?

#include <iostream>
#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;

class A
{
  ptree pt_;
public:
  void set_ptree(const ptree &pt)
  {
    pt_ = pt;
  };
  void update_ptree(const ptree &pt)
  {
    //How do I merge/update a ptree?
  };
  ptree get_ptree()
  {
    return pt_;
  };
};

int main()
{
  A a;
  ptree pt;
  pt.put<int>("first.number",0);
  pt.put<int>("second.number",1);
  pt.put<int>("third.number",2);
  a.set_ptree(pt);
  ptree pta = a.get_ptree();

  //prints "0 1 2"
  std::cout << pta.get<int>("first.number") << " "
            << pta.get<int>("second.number") << " "
            << pta.get<int>("third.number") << "\n";


  ptree updates; …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-propertytree

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

如何编程连接池?

是否有已知的实现连接池的算法?如果不是已知的算法是什么,他们的权衡是什么?
在设计和编程连接池时,常见的设计模式是什么?
是否有任何代码示例使用boost.asio实现连接池?
使用连接池来保持连接(而不是http)是个好主意吗?
线程如何与连接池相关?你什么时候需要一个新线程?

c++ design-patterns boost-asio

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

在给定整数约束的Mathematica中简化积分结果的正确方法

评估以下积分应该是非零的,并且mathematica正确地给出非零结果

Integrate[ Cos[ (Pi * x)/2 ]^2 * Cos[ (3*Pi*x)/2 ]^2, {x, -1, 1}]
Run Code Online (Sandbox Code Playgroud)

但是,尝试更一般的积分:

FullSimplify[
    Integrate[Cos[(Pi x)/2]^2 Cos[((2 n + 1) Pi x)/2] Cos[((2 m + 1) Pi x)/2], 
              {x, -1, 1}], 
    Element[{m, n}, Integers]]
Run Code Online (Sandbox Code Playgroud)

产生零,对于m = n = 1,这肯定不正确

我期待一个条件表达式.是否有可能在评估积分之前"告诉"mathematica关于m和n的约束,以便它正确处理特殊情况?

wolfram-mathematica

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

您将如何在Mathematica中执行数据透视表功能?

Excel中的数据透视(或交叉表)非常有用.有没有人已经考虑过如何在Mathematica中实现类似的功能?

wolfram-mathematica

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

将有限范围的元素与模式匹配

在研究我对这个问题的答案时,我想到很难匹配有限范围的元素.使用内置模式,您可以匹配1个元素(_),1个或多个元素(__)或零个或多个元素(___).为了匹配多个元素,我使用了PatternSequence,就像这样

a:PatternSequence[_,_,_]
Run Code Online (Sandbox Code Playgroud)

或者,更一般地说

a:PatternSequence@@Array[_&,3].
Run Code Online (Sandbox Code Playgroud)

(使用a Condition也可以.)为了匹配我们可以做的n到m个元素的范围

a:Alternatives@@( PatternSequence @@@ Array[_&, {n,m}] ),
Run Code Online (Sandbox Code Playgroud)

但这是一种相当复杂的方式来完成可以完成的事情

a__ /; n <= Length[{a}] <= m.
Run Code Online (Sandbox Code Playgroud)

然而,这提出了一个有趣的问题,使用Condition直接匹配范围0到n的形式,

a___ /; Length[{a}] <= n,
Run Code Online (Sandbox Code Playgroud)

但是这可以单独使用模式来完成,即不使用Condition(/;)吗?更具体地说,如何在不添加条件的情况下匹配0个元素?还有哪个更快?

wolfram-mathematica

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

领导/追随者与工作队列

我刚读了一篇关于Leader/Follower模式的论文,如果我理解正确,我会将我的工作人员留在队列中,第一个工作人员接收传入请求并从队列中分离.

使用正常的工作队列(例如,rabbitmqbeanstalkd),反之亦然:我将我的工作保留在队列中,一旦工人完成处理,它就会从队列中获取第一个工作.

有什么东西我不见了?

那么,我应该使用Leader/Follower方法而不是工作队列的优势是什么?或者反过来说,在什么情况下工作队列更适合?

再见,尼科

queue parallel-processing design-patterns scalability

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