草庐IT

std-ranges

全部标签

c++ - std::regex_replace 期间的堆栈溢出

我正在尝试执行以下基于C++STL的代码来替换相对较大的SQL脚本(~8MB)中的文本:std::basic_regexreProc("^[\t]*create[\t]+(view|procedure|proc)+[\t]+(.+)$\n((^(?![\t]*go[\t]*).*$\n)+)^[\t]*go[\t]*$");std::basic_stringreplace=_T("ALTER$1$2\n$3\ngo");returnstd::regex_replace(strInput,reProc,replace);结果是堆栈溢出,并且很难在该特定站点上找到有关该特定错误的信息,因为

c++ - 将 std::function 绑定(bind)到不同对象实例的相同函数

是否可以重新绑定(bind)std::function以指向相同的函数但具有不同的对象实例?如果我有一个对象,它有一个绑定(bind)到另一个函数的std::function,但是如果那个对象被复制到另一个实例,我想将std::function重新绑定(bind)到那个新实例而不是旧实例。#include"stdafx.h"#include#includeclassEventHandler{public:intNum;std::functionOnEvent;EventHandler(intinNum){Num=inNum;}EventHandler(constEventHandler

c++ - 使用 std::enable_if 作为函数参数与模板参数有什么区别?

我想知道使用std::enable_if有什么区别?作为函数参数还是模板参数?我有以下两个函数模板:#includetemplatevoidf_function(T,typenamestd::enable_if_t::value,int>=0){}template::value>>voidf_template(T){}intmain(){intx=1;f_function(x);f_template(x);}产生以下程序集(从https://godbolt.org/g/ON4Rya开始):main:pushq%rbpmovq%rsp,%rbpsubq$16,%rspmovl$1,-4(

c++ - std::regex 转义在正则表达式中使用的特殊字符

我正在创建一个std::regex(__FILE__)作为单元测试的一部分,该单元测试检查一些打印文件名的异常输出。在Windows上它失败了:regex_error(error_escape):Theexpressioncontainedaninvalidescapedcharacter,oratrailingescape.因为__FILE__宏扩展包含未转义的反斜杠。是否有比循环遍历结果字符串(即使用std算法或某些std::string函数)更优雅的方式来转义反斜杠? 最佳答案 文件路径可以包含许多在正则表达式模式中具有特殊含

c++ - 如何将用户输入(来自 std::cin)与字符串进行比较?

这个问题在这里已经有了答案:HowdoIproperlycomparestringsinC?(10个答案)关闭6年前。所以这听起来很简单,但我遇到了一些奇怪的行为。在我的程序中有如下代码:std::cout>ans;if(ans!="global")std::cout>"当我运行我的程序并在系统提示我输入时输入“global”时,程序返回:>>global为什么if语句的计算结果为true?

c++ - std::string not nothrow move assignable or comparable?

我在研究type_traits时,发现了std::string的这个奇怪属性:$cata.cpp#include#includestatic_assert(std::is_nothrow_move_assignable::value,"???");static_assert(noexcept(std::declval()==std::declval()),"???");$g++-std=c++14a.cppa.cpp:4:1:error:staticassertionfailed:???static_assert(std::is_nothrow_move_assignable::val

c++ - 在 C++11 中为包含 std::tuple 的对象键入删除

假设我有一个通用类Container,它包含任何类型的元组,并且有一个函数templateT&get();返回对元组中元素的引用。我非常简单的实现如下所示:templateclassContainer{std::tuplecontents;public:Container(constTs&...ts):contents(ts...){}templateT&get(){//TypeIndexissomemeta-programmingstructtofindindexofTinTsreturnstd::get::value>(contents);}};有没有什么好的类型删除技术可以在不改

c++ - 在主程序退出期间销毁等待 std::condition_variable 的线程的正确方法

我正在使用std::conditional_variable为多线程程序中的信号计时,以控制各个关键部分的流程。该程序可以运行,但在退出期间我不得不使用谓词(kill_==true)来避免破坏仍在等待std::conditional_variable::wait()的线程。我不知道它是否是销毁所有等待线程的正确方法,征求意见。这是一个代码片段:classtimer{//...timer(std::shared_ptrparent,constbool&kill):parent_(parent),kill_(kill){}private:std::condition_variablecv_

c++ - 带有自定义删除器的 std::shared_ptr 的 Typedef 别名

我想为std::shared_ptr创建别名使用自定义删除器。此代码有效,但仅适用于唯一指针。我收到有关标有[1]的行的无效模板参数数量的错误。我注意到std::unique_ptr的模板和ctor参数和std::shared_ptr与所列不同here和here我注意到这个问题可能与this重复,但我不知道如何解决我的问题#include#includetemplatestructDeleter{voidoperator()(T*p)constnoexcept{p->Drop();//SFINAE};};templateusingmy_unique_ptr=std::unique_pt

c++ - 在此上下文中的完美转发和 std::move 行为

我是C++新手,我想了解完美转发如何与std::move结合使用.我定义了一个std::vectorqueue()我想使用模板函数填充fillWithData.由于我花了一些时间研究完美转发,所以我首先要检查我是否理解正确,其次要弄清楚move是什么。在此上下文中的行为。fillWithData是一个可变参数模板函数,感谢forward,能够通过折叠规则将参数视为左值或右值。(Q1-是否正确?)templatestaticvoidfillWithData(Container&oDataContainer,Args&&...args)//universalreference{typede