c++的绑定实现.

元<型名...>构 空器{用 型=空;};
元<型名...A>用 是空型=型名 空器<A...>::型;

元<型名 T,型名=空>构 是灵针:假型{};
元<型名 T>构 是灵针<T,是空型<推导(求值<T>().符号->()),推导(求值<T>().取())>>:真型{};//推导失败没啥
//有这两个操作的就是灵针.
//只要返回入,则可以导入元<型名 F>中
枚 针型{是引,是针,是灵};

元<型名 F>常式 整 求针型(){
    如(是指针值<F>)中 是针;
    异 如(是灵针<F>::值)中 是灵;//要加个值
    异 中 是引;
}//要加常式,
元<整 N,型名 P,型名 F>动 绑定实现(P&&p,F&&f){
    如 常式(N==1)
        中[&](动&&...o){中(p->*f)(o...);};
    异 如 常式(N==2)
        中[&](动&&...o){中(p.取()->*f)(o...);};
    异 中[&](动&&...o){中(p.*f)(o...);};
}//要这样使用,这样分发,我叉,编译时计算的N,一定要加常式,这是关键

元<型名 P,型名 F>动 绑定(P&&p,F&&f){
    常式 整 N=求针型<F>();
    中 绑定实现<N>(前向<P>(p),前向<F>(f));
}//在这里,直接F.

代码如上.关键点是只要是使用编译时的N,无论在哪里都要加上常式.
参考地址.
人家的实现更复杂.我也不喜欢再绑定参数了,麻烦.
要深刻理解下面代码,如何编译时运算?,还是基础不牢:

template<std::size_t I>
auto& get(person& p) {
    if constexpr (I == 0) {
        return p.id;
    }
    else if constexpr (I == 1) {
        return p.name;
    }
    else if constexpr (I == 2) {
        return p.age;
    }
}
template <typename T>
std::string to_string(T t){
    if constexpr(std::is_same_v<T, std::string>)//常式,常式,有编译时就有常式.
        return t;
    else
        return std::to_string(t);
}
posted @   zjh6  阅读(13)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示