草庐IT

boost-lambda

全部标签

c++ - 如何编写丢弃其参数的通用可变参数 lambda?

我想编写一个lambda,它通过通用引用接受任意数量的参数并完全忽略它们。显而易见的方法是使用可变通用参数包的语法并省略参数名称:automy_lambda=[](auto&&...){return42;};在我trytopassanontrivially-copyableobject之前这工作正常(使用gcc4.9.2):structS{S(){}S(Sconst&){}};my_lambda("meow",42,S{});^error:cannotpassobjectsofnon-trivially-copyabletype'structS'through'...'这是怎么回事?我

python - 为什么不能使用 std::ref 将对象传递到 Boost.Python 模块中?

环境:使用Python3.5编译的Boost1.61.0以下C++代码输出12:classA{public:intfunc(){return12;}};BOOST_PYTHON_MODULE(bridge){usingnamespaceboost::python;class_("A",no_init).def("func",&A::func);}intmain(){Aa;PyImport_AppendInittab("bridge",PyInit_bridge);Py_Initialize();usingnamespaceboost::python;dictdictMain=extra

c++ - 使用 Visual Studio 2015 : error C3546 在 lambda 中扩展参数包

正在关注thisquestion,我尝试编译以下代码:templateautofor_each(type_list){return[](auto&&f){usingswallow=int[];(void)swallow{0,(void(f(tag{})),0)...};};}这适用于gcc,但在visualstudio2015中会产生以下错误:main.cpp(19):errorC3546:'...':therearenoparameterpacksavailabletoexpandmain.cpp(48):note:seereferencetofunctiontemplateinst

c++ - constexpr lambda/‘x’ 没有命名类型;你是说 ‘x’ 吗?

我正在尝试使用C++17的constexprlambdas来获取编译时字符串:#includetemplatestructstr{constexprautooperator==(conststr&)const{returntrue;}voidfoo()const;};templateconstexprautomake_str(Ss,std::index_sequence){returnstr{};}#defineLIT(s)\make_str([](){returns;},std::make_index_sequence{})constexprautox=LIT("hansi");co

c++ - 如何将严重程度与 Boost 日志中的相同宽度对齐

例如,'info'和'warning'的宽度不同,在日志中看起来不漂亮。我想在日志中将它们对齐到相同的宽度。看来我可以使用本文所述的自定义格式化程序工厂:boostlogformatsingleattributewithlogging::init_from_stream这是使用自定义严重级别的另一种解决方案:howdoIformatacustomseverity_levelusingaformatstring除此之外,是否有更简单的方法来实现这一点,就像printf一样自定义格式字符串? 最佳答案 您可以尝试将格式化程序设置为类似e

c++ - Boost.Filesystem 和 C++ 标准文件系统库有多相似?

我需要一个文件系统库,以便与支持C++11的编译器或支持C++14的编译器一起使用-所以它不能来自C++17。现在,我知道进入C++17的文件系统库是基于Boost::Filesystem的;但是-它们是否足够相似,让我可以使用Boost库,然后在以后无缝切换到标准版本,而不需要改变,比如using语句?或者两者之间是否存在(次要/重大)差异?我知道对于variant,Boost和标准库版本有很大不同。 最佳答案 有许多不同之处。我相信,有些是从未传播过的Boost更改。例如,没有path.filename_is_dot()查询(如

c++ - 为什么闭包类型/lambda 在 C++ 中没有默认构造函数

lambda没有默认构造函数的原因是什么?这背后有任何技术原因,还是纯粹的设计决定? 最佳答案 C++中的Lambda是一种方便的语法,允许程序员避免使用像这样的传统语法声明仿函数structmy_functor{booloperator()(Object&){/*dosomething*/returnfalse;}}因为使用这种语法编写仿函数对于简单的函数来说被认为太冗长了。Lambda提供参数捕获选项,例如[=]、[&]等,以节省您声明变量和初始化它们的时间,就像您在仿函数对象的构造函数中所做的那样。因此,Lambda不会按设计

c++ - 如果我的模板类型首先作为 lambda 参数出现,MSVC 会引发一个奇怪的错误

考虑这段代码:#defineSOLUTION0templateconstexprintone=1;templatestructA{staticconstexprinto=one>;voidcall(){static_assert(one>==1,"Failure");}};intmain(){#ifSOLUTIONAobject;#endif[](Aa){a.call();};return0;}构建成功hereonideone,无论SOLUTION的值如何定义。现在,我知道这段代码没有什么实际意义,但那是因为我认真地试图找到这种奇怪行为的最小工作示例。如果我使用最新的VisualStu

c++ - 如何使用 boost::latch?

我试图在我的程序中使用boost::latch来阻止等待,直到所有线程完成或超时。我的代码如下。ctpl是从https://github.com/vit-vit/CTPL采用的线程池库.#include#include#include#includeusingnamespacestd;intmain(intargc,char**argv){ctpl::thread_poolouter_tp(100);ctpl::thread_poolinner_tp(5,5000);autoout_func=[&inner_tp](intouter_id,intouter_invoke_idx){in

c++ - Boost 1_65_1 不使用 OpenSSL 1.1.0g "undefined reference"编译,但使用 "nm"找到

我正在尝试让SSL与boostASIO一起工作。我在Windows上使用MingW6.3。我用MingW构建了OpenSSL1.1、1.0和0.8,当我尝试将它们链接到项目时,我总是会遇到不同的错误(取决于缺少什么)。现在我正在尝试使OpenSSL1.1.0g工作,但即使我使用CMAKE手动提供库的路径,我也会遇到这些错误:如果我使用OpenSSL1.1.0g构建我的项目,这是错误:"C:\ProgramFiles\JetBrains\CLion2017.2.3\bin\cmake\bin\cmake.exe"--buildC:\Users\myuser\Documents\Mages