jjzjj

具有多个构造函数签名的 C++ 通用工厂?

有没有人将AndreiAlexandrescu的经典通用工厂(Chapter8的第208页,ModernC++Design)与Boost.TypeErasure的“多功能”功能相结合??也就是说,具有多个创建者函数签名的灵active,这些签名在参数的数量和类型方面有所不同(但仍然具有相同的返回类型并且在编译时已知)。也就是说,如何组合这个稍微简化的泛型Factory:#include#include#includetemplateclassFactory{public:boolRegister(constIdentifierType&id,ProductCreatorcreator)

c++ - 在 boost 二进制文件上使用显式位置编译 boost 标志

我正在编译一个需要boost::filesystem的项目。我在编译步骤中包含了以下标志:g++-Wall-ggdb-Werror-std=c++11-lboost_system-lboost_filesystem-I/custom/path/to/boost_1_67_0-obuild/mainbuild/cp.obuild/walk.obuild/diff.obuild/main.o我得到一个错误:build/cp.o:Infunction`boost::filesystem::relative(boost::filesystem::pathconst&,boost::filesy

c++ - 使用协程隐藏阻塞操作

我有一个通过UDP接收数据的服务,我想添加一些zmq订阅者。我也想在不阻塞的情况下使用zmq套接字。我不想为它创建一个单独的线程。我可以使用zmq_socket::receive(msg,ZMQ_DONTWAIT)但这会导致繁忙的循环和100%的CPU使用率。我从1.58开始尝试boost::coroutines,但没有成功-我无法隐藏阻塞接收(套接字RCVTIMEO设置为-1).我相信我遗漏了一些东西,只是不正确地使用了这些工具。所以问题是隐藏阻塞接收的正确方法是什么? 最佳答案 我不确定您使用的是哪个zeromq包装器库,所以这

c++ - 是否有将 EBNF 翻译成 boost::spirit 的翻译工具?

翻译器也可以在boost::spirit中。我在互联网上找不到任何东西。也许我应该做一个? 最佳答案 从spiritintroduction开始:ExpressiontemplatesallowustoapproximatethesyntaxofExtendedBackus-NormalForm(EBNF)completelyinC++.因此您几乎可以编写纯EBNF,不需要翻译器。我对spirit不是很熟悉,不知道语法到底有什么不同,但是如果spiritC++EBNF和realEBNF的差异很小,那么一个简单的sed脚本可能就足够了

c++ - 如何将 Boost 线程池从 fifo 转换为优先级?

我正在开发一个Boost线程池。我有这样的结构:classSimThreadPool{staticSimThreadPool*getInstance();boost::threadpool::prio_pool&getThreadPool(){returnmThreadPool;}simTerrain::SimThreadPool::SimThreadPool():mThreadPool(boost::threadpool::fifo_pool(1)){}boost::threadpool::prio_poolmThreadPool;}当我需要一个线程时,我这样调用它:SimThrea

c++ - 专门针对 const 成员函数指针

我正在尝试将一些实用程序代码专门用于const成员函数,但在让简单的测试用例工作时遇到问题。为了简化工作,我正在使用Boost.FunctionTypes及其components模板-应该是contain的MPL序列标签const_qualified对于const成员函数。但是使用下面的测试代码,常量成员函数的特化失败了。有人知道如何让它发挥作用吗?测试代码打印出来(使用VC8和boost1.40):non-constnon-const预期输出是:non-constconst测试代码本身:#include#include#include#include#includenamespace

c++ - boost::filesystem::create_directories();将文件夹添加到陌生位置

我正在使用boost创建一个目录来放置一些临时文件。intmain(intargc,char*argv[]){std::cout现在,如果双击该exe,文件夹"TempFolder"将在与exe相同的目录中创建,这是我所期望的。但是,如果我现在将一个文件拖到exe上,该文件夹将在"C:\DocumentsandSettings\0xC0DEFACE"中创建,这是我当然没有想到的。看到我的应用程序没有改变,正在打印的目录也没有改变,我的应用程序当前忽略传递的字符串,为什么现在在新目录中创建文件夹?我正在运行带有VS9的WindowsXP,并且我正在使用boost1.39。

c++ - 在 OSX 上设置 CUTE(Eclipse CDT 单元测试插件)

我正在尝试设置CUTEEclipseC/C++开发工具的单元测试插件。documentation说:IfyoudidnotinstallBoostinthestandardlocation,youwillneedtospecifyit.RightclickonthenewlycreatedCUTEproject,andselectProperties.InC/C++Build,Settings,choosetheToolSettingstab.SpecifytheBoostincludepathinGCCC++Compiler,Directories,andspecifythelibr

c++ - 如何获得 2-Sat 值

每当我搜索2-Sat的算法时,我都会得到问题的决策形式的算法:是否存在满足所有子句的合法值集。但是,这不允许我轻松找到一组令人满意的bool值。我如何有效地找到满足2-Sat实例的合法值集?我在使用boost库的C++中工作,希望能够轻松集成代码。提前致谢 最佳答案 如果您有一个决策算法来检测是否存在对2-SAT的有效分配,您可以使用它来实际找出实际分配。首先对整个表达式运行2-SAT决策算法。假设它说有一个有效的分配。现在,如果x_1是文字,则将x_1赋值为0。现在计算结果表达式的2-SAT(因此,您必须分配一些其他文字,例如,如

c++ - boost::fusion::push_back 的正确用法是什么?

//...snippedincludesforiostreamandfusion...namespacefusion=boost::fusion;classBase{protected:intx;public:Base():x(0){}voidchug(){x++;coutvoidoperator()(T&t)const{t->chug();}};intmain(){typedeffusion::vectorStuff;Stuffstuff(newBase,newAlpha,newBravo,newBase);fusion::for_each(stuff,chug());//Mutat