首页 > 其他分享 >万能可调用对象绑定器CPBind

万能可调用对象绑定器CPBind

时间:2024-07-13 17:28:40浏览次数:15  
标签:std ... args const CPBind 绑定 bindArgs BindArgs 万能

背景

作为一个C++程序员,经常喜欢写一些代码小工具,有一天写代码用到了std::bind,需要和std::function配合使用,并且需要传递的参数类型也已经固定,所以我就想能不能写一个类让它可以接受任意类型的可调用对象(C函数,成员函数,静态函数,lambda表达式,重载operator()的类对象等),所以写出来这个CPBind类达成我想要的效果。

思路

在使用C++14 标准的std::any的时候,浅研究了一下std::any的实现原理,瞬间有了大致思路。使用嵌套类模板可以达到想要的效果。这是最核心的思想之一。

 区别与bind

  1. std::bind功能更强大,功能更丰富。CPBind缺少类似_1,_2,...的按位置绑定,目前仅支持顺序绑定。
  2. 假设两个函数A(std::function<int(int,int)> func), B(CPBind bind)。 那么A接受的可调用对象类型已经固定,即使使用std::bind,类型还是必须需要包括int,int两个参数和返回值为int。而B则没有限制,可以接受任意类型的函数。这是最重要的一个区别,也是为什么要写这个CPBind的原因。
  3. std::bind绑定的时候,也就是在编辑代码的时候,绑定错误就可以立马发现并修改代码。CPBind在绑定的时候发现不了,调用时剩余参数少传入,调用时剩余参数类型传入错误,这些错误只有运行起来的时候才可以发现。
  4.  关于第三点的问题后续慢慢看能不能有什么方案来解决。

 删除了的部分

1.  每一个CPBind对象可以动态的获取绑定的可调用对象的返回值类型,参数类型,可以按照位置获取每一个参数的类型。

2. 类似std::sequencestd::make_sequence的模板类。有标准的我还写个

标签:std,...,args,const,CPBind,绑定,bindArgs,BindArgs,万能
From: https://blog.csdn.net/m0_56662207/article/details/140400618

相关文章

  • 接口(抽象类)与后期静态绑定学习
    <?php//抽象类abstract声明抽象类不能被实例化//抽象类经常用于描述一些事物所具有的特征和行为,但是没有具体的实现//抽象类:设计与实现的分离抽象类可以为子类提供一些公共的接口以作为子类重写的模板来使用abstractclassPerson{protected$name;protec......
  • Linux 多网卡绑定(AB网-ip漂移)-bonding机制-ifenslave工具
    作用:主备网卡所谓的多网卡绑定就是将多张物理网卡逻辑上组成一个网卡,这样就可以防止一块网卡坏了网络瘫痪,也能起到提升网络带宽的作用。把多块网卡绑定在一起,一般有两种工作模式可以选择,轮询模式和主备模式-轮询模式:例如把两块网卡绑定在一起,此时两块网卡都处于工作状态,它......
  • 将WPF内部绑定的控件和数据拉取出来
    一般最简单的ItemsControl的写法是<ItemsControlItemsSource="{BindingStudents}"><ItemsControl.ItemTemplate><DataTemplate><TextBlockText="{BindingName}"/>......
  • WPF ComboBox数据绑定:初始化动态加载ItemsSource后首次赋值Text不显示问题解决
    原来:<ComboBoxText="{BindingItem}"ItemsSource="{BindingItemLists}"></ComboBox>privatevoidParas_Init(){ItemLists=newObservableCollection<string>();ItemLists.Add("111......
  • 【Java探索之旅】多态:重写、动静态绑定
    文章目录......
  • 在Linux中,当你需要给命令绑定⼀个宏或者按键的时候,应该怎么做呢?
    在Linux中,给命令绑定一个宏或者按键通常涉及到使用shell的内置命令或者编辑器(如vim)的宏定义功能。以下是详细的步骤和方法:1.使用bash的bind命令bashshell的bind命令允许你更改bash对键盘上按下的键和键组合的响应方式,从而实现宏或按键的绑定。基本步骤查找按键的字符序列:......
  • 001,函数指针是一种特殊的指针,它指向的是一个函数地址,可以存储函数并作为参数传递,也可
    函数指针是一种特殊的指针001,函数指针是一种特殊的指针,它指向的是一个函数地址,可以存储函数并作为参数传递,也可以用于动态绑定和回调函数文章目录函数指针是一种特殊的指针前言总结前言#include<iostream>usingnamespacestd;intadd(inta,intb){ return......
  • Rust变量绑定
    变量绑定Rust通过静态类型确保类型安全。变量绑定可以在声明时说明类型,不过在多数情况下,编译器能够从上下文推导出变量的类型,从而大大减少了类型说明的工作。使用let绑定操作可以将值(比如字面量)绑定(bind)到变量。fnmain(){letan_integer=1u32;leta_boo......
  • vue3 父子组件双向绑定
    父组件ParentComponent.vue<!--ParentComponent.vue--><template><div>子组件输入的数据<p>ParentValue:{{parentValue}}</p>父输入框<inputv-model="parentValue"><CustomInputv-model="par......
  • HarmonyOS开发实战系列:网络连接绑定到应用规范-Web组件
    1.网络类型简介移动设备一般都具备移动网络和无线WIFI的连接能力,有些还可以接入有线以太网,这些网络可以根据需要随时切换。鸿蒙APP可以自动适应上述的网络,一般来说,会优先使用WIFI或者有线以太网,移动网络因为要收费,不会首选使用。但是在某些特殊情形下,可能要求必须使用某一种......