草庐IT

boost-lambda

全部标签

c++ - 使用 boost::program_options 禁止无符号值的负参数

假设我有一个程序使用boost::program_options来解析命令行参数,其中一个有一个unsigned值:#include#includenamespacepo=boost::program_options;intmain(intargc,char*argv[]){unsignednum;po::options_descriptiondesc;desc.add_options()("num,n",po::value(&num),"Non-negativenumber");po::variables_mapvm;po::store(po::parse_command_line(

c++ - Boost.Hana 中是否有与 Boost.Fusion 中的 View 概念等效的概念?

我尝试使用hana::for_each迭代用户定义的结构,并注意到它被复制/移动,而Boost.Fusion允许您迭代在原始结构上。我没有在Boost.Hana中找到任何类似于Boost.Fusion的View概念。如何将转换应用于序列而不每次都复制/移动它们?#include#includestructFoo{Foo()=default;Foo(constFoo&){std::cout更新:我尝试使用hana::transform将std::ref应用于成员,但是Struct不是Functior,所以transform不适用于这种情况。我能够使用hana::accessors实现所需

c++ - std::transform with lambda: 跳过一些项目

我有一些C++11代码,比如std::vectornames;std::mapfirst_to_last_name_map;std::transform(names.begin(),names.end(),std::inserter(first_to_last_name_map,first_to_last_name_map.begin()),[](conststd::string&i){if(i=="bad")returnstd::pair("bad","bad");//Don'tWantThiselsereturnstd::pair(i.substr(0,5),i.substr(5,

c++ - 将 boost ptime 从本地时间转换为 UTC

我有一个boost::posix_time::ptime对象(Boostv1.60),它包含系统时区中的日期和时间信息。我需要将其转换为UTC格式的unix时间戳。time_tconvertLocalPtimeToTimestamp(constboost::posix_time::ptime&pt){usingnamespaceboost::local_time;staticconsttime_tt_null=0;staticstructtm*tm_local=localtime(&t_null);statictime_zone_ptrzone(newposix_time_zone(t

c++ - 使用 boost asio 捕捉 Ctrl-C

我正在尝试在应用程序中捕获Ctrl-C,如下面的MWE所示#include#includevoidhandler(constboost::system::error_code&error,intsignal_number){std::cout>choice;}}不幸的是,当我按下Ctrl+C时,handler()没有被调用。相反,循环不再等待用户输入,如下所示:c:\tmp>CtrlC.exePressakey:dPressakey:ePressakey:Pressakey:Pressakey:Pressakey:Pressakey:Pressakey:Pressakey:Pressa

c++ - 将 lambda 作为参数传递时重载函数

我正在尝试在返回参数为void或T时实现模板函数。我使用sfinae尝试了上述代码的不同变体,但仍然不确定在lamdba是函数参数的情况下这通常是否可行。以下代码无法编译:#includetemplateTApply(conststd::function&func){returnfunc();}templatevoidApply(conststd::function&func){func();}intmain(intargc,char*argv[]){inti1=Apply([](){return10;});boolb1=Apply([](){returntrue;});Apply([

c++ - 在 namespace 内的 lambda 中使用时找不到运算符重载

以下不编译(使用Clang5.0.0/gcc7.3,std:C++11):Clang中的错误信息:错误:二进制表达式的无效操作数(std::vector>和std::vector>)#include#includenamespacens{usingMyType=std::vector;}//namespacensusingns::MyType;MyType&operator+=(MyType&lhs,constMyType&rhs){for(inti=0;i;Funcoperator+(constFunc&lhs,constFunc&rhs){return[lhs,rhs](){aut

c++ - Lambda 类型推导

autodothings=[](longposition){autovariable;/*dothings*/returnvariable;};floatx=dothings(1l);chary=dothings(2l);基本上,我很好奇的是,lambda内部的变量是否有可能以任何方式推断返回值分配给的类型,在这种情况下它是float和char。有没有等同于模板类型名的东西?谢谢。 最佳答案 这可以做到,但它a)有点复杂,b),在99.9%的情况下,这并不是一个好主意。以下是您的操作方式。您可以根据将表达式分配给的类型执行某些操作的

c++ - 在 MS Visual Studio 2017 中将 boost::thread 与 CMake 一起使用会导致两个编译器错误

我想在我的项目中使用boost::thread并且我使用CMake作为构建工具。然而,即使是非常简单的设置也会导致两个编译器错误:main.cpp#includeintmain(){boost::threadt;return0;}CMakeLists.txtcmake_minimum_required(VERSION2.6)project(ThreadTest)set(Boost_USE_STATIC_LIBSOFF)set(Boost_USE_MULTITHREADEDON)set(Boost_USE_STATIC_RUNTIMEOFF)find_package(Boost1.58.

c++ - 制作生成器列表(lambda 的 vector )会导致通过引用捕获的非常奇怪的行为

以下代码与我的实际应用程序非常相似。基本上,我正在尝试创建一个函数vector,以便我可以分段生成非常大的输出。我不完全理解引用捕获[&]是如何工作的/应该是如何工作的,它会导致一些奇怪的行为。#include#include#includeusingnamespacestd;templateTadd(constT&a,constT&b){returna+b;}templateTadd(constT&a,constT&b,Tx){return(add(a,b)*x);}intmain(){std::cout>funks;for(longi=1;i,i,i*i);std::coutfun