草庐IT

c++ - boost::lock 在 boost 1.53 中无法编译

我正在编译一个项目。它有以下几行:boost::mutex::scoped_lockml(m_meta_mut,boost::defer_lock);boost::mutex::scoped_locktl(m_tables_mut,boost::defer_lock);boost::lock(ml,tl);我在第三行收到lockisnotamemberofboost。我用的是boost1.53(项目推荐1.49)问题是什么 最佳答案 将我的评论变成更完整的答案。boost::lock()功能是definedinboost/threa

c++ - 将 STL 容器与 boost 范围适配器一起使用时出现 value_type 错误

我一直在尝试了解boost范围适配器的使用,但我发现的所有工作示例仅使用具有基本类型的STL容器,例如std::list并尝试使用我自己的类(class)会使一切分崩离析。#defineBOOST_RESULT_OF_USE_DECLTYPE#include#include#include#include#include#include#include#include#includestructThing{Thing():_id(0),_name(""){}std::size_t_id;std::string_name;};intmain(){std::vectorinput;std:

c++ - 现在我可以替换所有 Date 类吗?

我有一个很大的旧C++项目。它至少有三个日期和时间结构。它们看起来像:structDate{intday;intmonth;intyear;};structTime{inthour;intmin;intsecond;};其中一些使用double,用于Time::second,其中一些具有“优化”并使用short用于Time::(min,hour)和Date::(month,天).那么现在有了新的C++11标准(并且可能会得到boost)是否有可能用每个人都使用的东西代替它们?我看过std::chrono,但不知道如何使用它。例如,为了说明我这里想要的测试用例:我有一个函数,我为这个函数

c++ - 使用 Boost Spirit 的指数运算符表达式语法

我想将求幂运算符添加到expressiongrammarprovidedintheBoostspiritsamples.BNF语法如下:(例如,参见此答案:"Unambiguousgrammarforexponentiationoperation")E->E+T|E-T|TT->T*F|T/F|XX->X^Y|YY->i|(E)我把它翻译成Boostspirit是这样的:templatestructcalculator:qi::grammar{calculator():calculator::base_type(expression){qi::uint_typeuint_;expres

c++ - 如何继承boost::geometry::model::point?

我想继承bg::model::point用自己的功能扩展它。*point*s应存储在rtree中.以下最小示例无法编译我的派生点(boost1.54,gcc4.7.2)的用法:#include#include#include#include#include#includenamespacebg=boost::geometry;namespacebgi=boost::geometry::index;namespaceboost{namespacegeometry{namespaceindex{//apparentlynecessary:templatestructindexable>{t

c++ - boost-asio 错误消息使用的编码是什么?

我正在使用boost-asio,我想正确处理错误消息。在这个例子中,我打错了字(1278而不是127):boost::system::error_codeec;autoaddress=boost::asio::ip::address::from_string("1278.0.0.1",ec);if(ec){autotext=ec.message();//DoSomethingwithtextbutwhatisitsencoding?}我收到一条错误消息,它似乎是在Windows1252中编码的(我使用的是Windows7)。所以看起来编码是操作系统编码。但是,我找不到任何说明这一事实的

C++ 列表<T> 到 Python 列表

我正在为现有的C++库编写包装器,该库使用列表,其中T是自定义结构。我被建议使用vector而不是列表,但我试图避免修改库。为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表作为代理来注册一个到python的转换(只读就可以)。我当前的实现编译正常,python导入正常,可以创建对象,但是当我调用数据成员时,它出错。pythonshell输出:In[1]:importmy_listIn[2]:x=my_list.Bob()In[3]:x.foos-----------------------------------------------------------------

c++ - boost::function 与函数指针

我正在实现一个通用设置读取器。我的想法是我有一个应用程序,它的设置可以是bool值、整数和字符串。然后我有一个Config类,其中实现了此类设置的getter,配置类在构造函数中接受了一个客户,因此它知道它将读取该客户的设置。我在让它工作时遇到了麻烦,我想我误用了boost::function,将它与普通函数指针混淆了。在映射中,我希望有引用,而boost::function应该只在配置读取时绑定(bind),因为我已经为那里分配了一个Config实例给定的客户。问题是我不能在没有typedef的情况下使用函数指针,这会使模板工作复杂化,有什么更明智的解决方案吗?#include"Co

c++ - 语法分解问题

当我尝试表达语法(Lua的小子集,几乎与mini_c相同;不那么复杂)时,我遇到了问题:g++驱动程序提供了gas和gas在一段时间后被压碎(当在具有8GBRAM的系统上达到大约500MB的总内存消耗时)。我查看了CompilerTutorial并发现,我们应该将复杂的语法分解成更小的语法。问题是它是强制性的,我们应该让类(由规则集组成)本身成为语法(即让它们继承自boost::spirit::qi::grammar)?IOW,我们能否将规则划分为子集并将它们作为字段分布在简单类声明之间,以定义(例如,在单独的header中)并显式实例化每个类(在实践中,类模板)到单独的翻译单元以避免

c++ - Boost ASIO - 获取排序的端点(首先是 IPv4,然后是 IPv6)

当boostasio(1.42)获取端点时,它可能同时包含IPv4和IPv6。是否可以对端点进行排序(先是v4,然后是v6)?boost::asio::ip::tcp::resolverresolver(io_service);boost::asio::ip::tcp::resolver::queryquery(host,boost::lexical_cast(port));boost::asio::ip::tcp::resolver::iteratorendpoint_iterator=resolver.resolve(query);boost::asio::ip::tcp::res