内置类型的基于C类型的调度
发布时间:2020-12-16 10:37:57 所属栏目:百科 来源:网络整理
导读:我需要一个调度程序功能,如下所示 templatetypename TT dispatcher() { // if T is double return _func_double(); // if T is int return _func_int(); // if T is char* return _func_char_pointer();} 并将使用如下 // some code that use above dispatch
我需要一个调度程序功能,如下所示
template<typename T> T dispatcher() { // if T is double return _func_double(); // if T is int return _func_int(); // if T is char* return _func_char_pointer(); } 并将使用如下 // some code that use above dispatcher template<typename T1,typename T2,typename T3> void do_multiple_thing(T1 *a1,T2 *a2,T2 *a3) { *a1 = dispatcher<T1>(); *a2 = dispatcher<T2>(); *a3 = dispatcher<T3>(); } 你能告诉我怎么做到的吗? 附: 解决方法
如果你有支持C 17的编译器,那么这段代码应该可以工作:
template<typename T> T dispatcher() { // if T is double if constexpr (std::is_same<T,double>::value) return _func_double(); // if T is int if constexpr (std::is_same<T,int>::value) return _func_int(); // if T is char* if constexpr (std::is_same<T,char*>::value) return _func_char_pointer(); } 否则,您将不得不进行模板特化,并为您想要的每个参数进行重载 //only needed for static assert template<typename T> struct always_false : std::false_type {}; template<typename T> T dispatcher() { //to make sure that on type you didn't overload you will have exception throw std::exception("This type was not overloaded") //static assert that will provide compile time error static_assert(always_false<T>::value,"You must specialize dispatcher for your type"); } //or to get compile time error without static assert template<typename T> T dispatcher() = delete; //the simplest solution template<> double dispatcher<double>() { return _func_double(); } //... and so on for all other functions (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- oracle create table xx as select ....CREATE TABLE XXX A
- c# – linq查询将3个表连接到一个表上
- 为什么我的c对象不会影响另一个c对象?
- 使用FastJson在JSON字符串、JSON对象及JavaBean之间的相互转
- tdd – 我应该只测试BDD中的公共接口吗? (一般来说,特别是
- React Native环境搭建
- ruby-on-rails-3 – 在Heroku(Rails)上崩溃的Copycopter服务
- Vue监听数据对象变化源码
- react-native – 如何在反应原生中输入输入字段时在键盘上方
- cocos2d-x从新建到打包成apk