首页 > 其他分享 >from key to function ptr

from key to function ptr

时间:2023-02-06 17:24:59浏览次数:48  
标签:function GRAY cout make YUV vec key pair ptr

/******************************************************************************

Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, OCaml, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.

*******************************************************************************/
#include <iostream>
#include <unordered_map>
#include <map>
#include <functional>
#include <vector>

using namespace std;

enum A {
    RGB=3, YUV=2, GRAY=4
};

template<A t, A tt>
void f() {
    cout << "default" << endl;
    cout << t << endl;
    cout << tt << endl;
}

template<>
void f<A::RGB, A::YUV>() {
    cout << "spec rgb -> yuv" << endl;
}

template<>
void f<A::YUV, A::RGB>() {
    cout << "spec yuv -> rgb" << endl;
}

template<>
void f<A::YUV, A::GRAY>() {
    cout << "spec yuv -> gray" << endl;
}


int main()
{
    f<YUV,RGB>(); // yuv -> rgb
    std::vector<std::pair<std::pair<A,A>, std::function<void()>> > vec;
    vec.push_back(make_pair(make_pair(A::RGB, A::YUV), f<A::RGB,A::YUV>));
    vec.push_back(make_pair(make_pair(A::YUV, A::GRAY), f<A::YUV,A::GRAY>));
    vec.push_back(make_pair(make_pair(A::YUV, A::RGB), f<A::YUV,A::RGB>));
    auto functor = vec[0].second;
    functor(); // rgb->yuv
    
    for (auto iter = vec.begin(); iter != vec.end(); iter++) {
        if (iter->first == make_pair(A::YUV,A::GRAY)) {
            (iter->second)(); // yuv -> gray
            break;
        }
    }
    cout << "split" << endl;
    
    std::map<std::pair<A,A>, void(*)()> mmap;
    mmap.emplace(make_pair(RGB, YUV), f<RGB,YUV>);
    mmap.emplace(make_pair(YUV, GRAY), f<YUV,GRAY>);
    
    mmap[make_pair(YUV,GRAY)]();
    
    

    return 0;
}

标签:function,GRAY,cout,make,YUV,vec,key,pair,ptr
From: https://www.cnblogs.com/ijpq/p/17096021.html

相关文章

  • 利用sshpass批量实现基于key验证脚本
    实现基于key验证的脚本1:[root@centos7~]#vim/etc/ssh/ssh_config#免应答known_hostsStrictHostKeyCheckingno[root@centos7~]#cathosts.list192.168.1.21019......
  • Python中monkey.patch_all()解决协程阻塞问题
    Python全栈工程师核心面试300问深入解析(2020版)----全文预览Python全栈工程师核心面试300问深入解析(2020版)----欢迎订阅直接参考以下实例,采用协程访问三个网站......
  • 超级好用的KeyBoard WPF软键盘
    超级好用的KeyBoardWPF软键盘​​项目背景​​​​系统结构​​​​核心概述​​​​1、用于墨迹识别核心类库​​​​2、中文字库​​​​效果展示​​​​1、拼音检索效......
  • Python3排序sorted(key=lambda)
    Python3排序sorted(key=lambda)简述:假如d是一个由元组构成的列表,我们需要用到参数key,也就是关键词,看下面这句命令,lambda是一个隐函数,是固定写法,不要写成别的单词;x表示列......
  • 创建并使用私钥privateKey登录 SSH 服务器
    使用privateKey登录SSH服务器是什么意思呢?我们平时登录Linux服务器的时候,经常是使用用户名和密码进行登录,但是如果我们要使用它进行代码连接或者其他操作的情况下,我们......
  • etcd集群搭建和使用中常见的报错信息(热key探测系列教程)
    etcd的下载地址:​​https://github.com/etcd-io/etcd/releases​​当前最新的v3.4.9,我之前用的时候包括目前京东热key线上都是用的3.4.6,下面主要是看一下如何搭建etcd集群。......
  • 京东热key探测框架本地压测数据记录,单机(8核)QPS约16万/s,可水平扩展
    继上一次全链路压测时,热key框架由于Java低版本(1.8.0_131之前的1.8版本)获取docker内cpu核数有问题,实则获取的是宿主机的核数,造成线程数量过多,压测瞬间cpu达到100%,问题也记录......
  • 基于 SptringBoot 实现实时消息推送,这里有7种解决方案!
    技术交流,公众号:程序员小富大家好,我是小富~我有一个朋友~做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能。不过他还没想......
  • gomonkey不生效
    gomonkey作用在运行时把原函数地址替换为目标函数地址go.modrequiregithub.com/agiledragon/gomonkey/v2v2.3.0a.gopackagemaintypeAstruct{}func(aA)get......
  • stream流中toMap()api和Duplicate key问题
    1、指定key-value,value是对象中的某个属性值。Map<Integer,String>userMap=userList.stream().collect(Collectors.toMap(User::getId,User::getName));2、指定key......