草庐IT

override_function

全部标签

c++ - 如何正确声明以函数类型为参数的模板(如 std::function)

我发现拥有像这样的简洁语法并非易事:std::function如果我将函数声明为:templateclassfunction{};定义函数的模板类型是一种普通的语法:functionf;但它使用部分模板特化的奇怪技巧templateclassfunction;//#1templateclassfunction{}//#2这是为什么呢?为什么我需要给模板一个带有空类型参数(#1)的空通用表单,否则它就无法编译 最佳答案 这正是语言的设计方式。主模板不能像那样对类型进行复杂的分解;您需要使用部分特化。如果我理解正确,您只想编写第二个版本

c++ - std::绑定(bind)到 std::function?

我使用这个得到一个编译错误:std::vector>functions;std::functionfoo=[](inta,intb){returna+b;};std::functionbar=std::bind(foo,2);functions.push_back(bar);错误是:/usr/include/c++/4.6/functional:1764:40:error:nomatchforcallto'(std::_Bind(int)>)(int)'谁能告诉我如何将std::bind转换为std::function? 最佳答案

c++ - 是否有将 "override"标识符添加到现有 C++ 代码的工具

任务我正在研究如何最好地添加C++0x的override在大量C++代码中已被覆盖的所有现有方法的标识符,无需手动执行。(我们有很多很多几十万行的代码,手动编写完全不会。)目前的想法我们的编码标准规定,我们应该为派生类中的所有隐式虚拟方法添加virtual关键字,即使完全没有必要(以帮助理解)。因此,如果我要自己编写添加脚本,我会编写一个脚本来读取我们所有的标题,找到所有以virtual开头的函数,并在以下分号之前插入override。然后在支持override的编译器上编译,修复基类中的所有错误。但我真的更不想使用这种本土方式,因为:这显然会很乏味且容易出错。不是每个人都记得每次都添

c++ - &foo::function 和 foo::function 有什么区别?

我正在使用linux上的gtkmm库为我的GUI绘制一个简单的菜单。在下面的代码中编译器提示无法解析地址sigc::mem_fun(*this,AppWindow::hide)));^appwindow.cpp:15:41:note:couldnotresolveaddressfromoverloadedfunction但是当我插入&时,它编译得很好m_menu_app.items().push_back(MenuElem("Quit",sigc::mem_fun(*this,&AppWindow::hide)));这有什么不同?hide函数不就是一个地址吗?

C++11 可变参数 std::function 参数

一个名为test的函数需要std::function作为它的参数。templatevoidtest(std::functionf){//...}但是,如果我执行以下操作:voidfoo(intn){/*...*/}//...test(foo);编译器(gcc4.6.1)说nomatchingfunctionforcalltotest(void(&)(int)).制作最后一行test(foo)编译和工作正常,我该如何修改test()功能?在test()功能,我需要f类型为std::function.我的意思是,是否有任何模板技巧可以让编译器确定函数的签名(例如foo),并将其转换为std

c++ - 替换 std::binary_function

std::binary_function现已弃用,将在c++17中删除.我搜索了不同的出版物,但我找不到替换它的确切方法。我想知道我应该如何在c++11中编写以下代码风格。templateinlineTabsolute(constT&x){return(x>=0)?x:-x;}templatestructabsoluteLess:publicstd::binary_function{booloperator()(constT&x,constT&y)const{returnabsolute(x)structabsoluteGreater:publicstd::binary_functio

c++ - "Default member initializer needed within definition of enclosing class outside of member functions"- 我的代码格式不正确吗?

#includestructfoo{intx{0};foo()noexcept=default;voidf()noexcept(noexcept(std::declval())){}};intmain(){}liveexampleongodbolt上面的代码可以用我测试过的任何版本的g++,以及3.6到3.9.1的clang++编译,但是不能用clang++4.0.0编译:test.cpp:6:5:error:defaultmemberinitializerfor'x'neededwithindefinitionofenclosingclass'foo'outsideofmemberf

C++1y 没有从 std::bind 到 std::function 的可行转换

我正在尝试将转发函数存储到std::function中。如果我使用std::bind,我会收到类似noifiableconversionfrom...之类的错误消息。如果我使用lambda,它可以编译。这里是示例代码#includetemplatevoidfunc1(inta,Handler&&handler){}templatevoidfunc2(Handler&&handler){//thislinecompilefinestd::functionfuncA=[handler=std::move(handler)](){func1(1,std::move(handler));};/

c++ - 警告 C4996 : This function or variable may be unsafe -- compared to GCC on POSIX

我注意到MS编译器会为cstdlib函数(如getenv)发出“已弃用”警告。MS发明了自己的标准,例如_dupenv_s。问题1AFAIK主要的“不安全”事情是关于重入*。既然MS的CRT被标记为“多线程”(/MT),他们为什么不直接将getenv替换为可重入的线程安全版本呢?是否有人会依赖不安全的行为?问题2我用GCCg++-Wall-Wextra-Weff++-pedanticfoo.cpp编译了相同的代码,它不会产生任何警告。所以我想这在POSIX上不是问题吗?这是如何解决的?(好吧,也许他们只是改变了getenv的行为,很高兴能得到确认。*说它只是关于可重入性是一种过度概括。

C++ "Virtual functions but no virtual destructors"

我有一个基类Media和几个派生类,即DVD、Book等...基类写成:classMedia{private:intid;stringtitle;intyear;public:Media(){id=year=0;title="";}Media(int_id,string_title,int_year):id(_id),title(_title),year(_year){}//virtual~Media()=0;voidchangeID(intnewID){id=newID;}virtualvoidprint(ostream&out);};问题是:没有析构函数,GCC给了我一堆警告cla