草庐IT

override_function

全部标签

C++ 模板 : conditionally enabled member function

我正在创建一个非常小的C++项目,我想创建一个简单的vector类来满足我自己的需要。std::vector模板类不会做。当vector类由char组成时s(即vector),我希望它能够与std::string进行比较.经过一番折腾之后,我编写了既能编译又能执行我想要的操作的代码。见下文:#include#include#includetemplateclassWorkingSimpleVector{public:constElementType*elements_;size_tcount_;//...templateinlinetypenamestd::enable_if::val

c++ - 如何将不可复制的 std::function 存储到容器中?

我想在C++11中将回调存储在vector或另一个容器中。这样做的一种方法是存储一个std::functionvector。这适用于带有可复制参数的lambda或std::bind。但是,如果有一个不可复制的(仅可move的)参数,它将因从lambda/std::bind内部类型到std::function的转换而失败...#includeclassNonCopyable{public:NonCopyable()=default;NonCopyable(constNonCopyable&)=delete;NonCopyable(NonCopyable&&)=default;};intm

c++ - libev C++ 包装器 function_thunk

voidset_(constvoid*data,void(*cb)(EV_P_ev_watcher*w,intrevents))throw(){this->data=(void*)data;ev_set_cb(static_cast(this),cb);}//functioncallbacktemplatevoidset(void*data=0)throw(){set_(data,function_thunk);}templatestaticvoidfunction_thunk(EV_P_ev_watcher*w,intrevents){function(*static_cast(w)

c++ - 使用 bind2nd() : "member function already defined or declared" instead of "reference to reference" 的奇怪编译器错误

我最近花了很多时间来理解在这段代码中调用func()时的错误消息:intmain(){vector>v;doublesum=0;for_each(v.begin(),v.end(),bind2nd(ptr_fun(func),&sum));return0;}当func()像这样声明时,代码编译正常:voidfunc(vectorv,double*sum){}当我使用这个声明(为了提高效率)时,我得到了一个编译器错误:voidfunc(constvector&v,double*sum){}我期望看到的错误类似于reference-to-reference错误,因为binder2nd的op

c++ - g++ std::is_function 实现:_ArgTypes 后跟 6 个句点是什么意思?

我正在查看我的header(g++-4.5.2)中一些模板的实现,我发现了以下内容:///is_functiontemplatestructis_function:publicfalse_type{};templatestructis_function:publictrue_type{};templatestructis_function:publictrue_type{};前两个声明似乎是合理的,但我不知道第三个是如何工作的。什么是......?我在标准中寻找它,但找不到任何东西。 最佳答案 这等同于:_Res(_ArgTypes

c++ - 我应该按值还是按(右值)引用传递 std::function?

我不太明白std::function的实例实际上包含什么。按值传递还是按引用传递效率更高?以下示例中的性能影响是什么?按值:voidprintStats(std::functionprinter);...std::stringtmp;printStats([&tmp](constchar*msg){tmp+=msg;});通过右值引用:voidprintStats(std::function&&printer);...std::stringtmp;printStats([&tmp](constchar*msg){tmp+=msg;}); 最佳答案

c++ - 从 std::function::target<>() 获取的函数指针和普通函数指针有什么区别?

以下代码是从APUE复制过来的signal实现,稍作修改namespace{usingsignal_handler=void(*)(int);signal_handlersignal(sigset_tsig,signal_handler);}Signal::signal_handlerSignal::signal(sigset_tsig,void(*handler)(int)){structsigactionnewAction,oldAction;sigemptyset(&newAction.sa_mask);newAction.sa_flags=0;newAction.sa_hand

c++ - 正确使用 std::function::target

任何人都可以帮我实现下面的函数test,以便它接受任何Callable和std::function并返回true如果std::function的目标是Callable?我一直在尝试各种方法,但没有一个一直有效,我什至无法弄清楚为什么它们适用于它们确实有效的案例。#include#include#includeintfoo(int){return0;}intfaz(int){return0;}struct{intoperator()(int){return0;}}bar,baz;templatebooltest(F1&&f1,std::functionf2){//returnf2.tem

c++ - c++ `override`/`final` 说明符的反义词是什么?

在c++11中overridespecifier防止不覆盖预期的虚拟基函数(因为签名不匹配)。finalspecifier防止无意中覆盖派生类中的函数。=>是否有说明符(可能是first或no_override)防止覆盖未知的基函数?当一个虚函数被添加到一个基类时,我想得到一个编译器错误,这个基类的签名与派生类中已经存在的虚函数具有相同的签名。编辑4:为了保持这个问题的简单性和相关性,这里又是原始伪代码抽象classB:A具有private:virtualvoidfooHasBeenDone()=0;classC:Bimplementsprivate:virtualvoidfooHas

c++ - 具有自动功能的 C++17 模板参数是否允许受约束的 std::function 对象?

随着non-typetemplateargumentswithauto即将推出的C++17特性,是否有可能以能够放置例如以下函数的方式实现std::function:boolf(intn,doubled){}boolg(boolb,charc){}boolh(boolb){}进入自动模板化的std::function对象:std::functionfaa=f;//okstd::functionfia=f;//okstd::functionfda=f;//error:functiontypemismatchstd::functiongaa=g;//okstd::functionhaa=h