Re: [问题] swith_case 用法

楼主: PkmX (阿猫)   2015-06-03 16:47:41
※ 引述《tropical72 (蓝影)》之铭言:
: 但.是 (如果没有但是的话下面可以不用看了...)
: 但.是. 如果好死不死,那些 func1 , func2 的 prototype 长得不一样的话呢?
: 像是 void func1(int, int) , double func2(double, int) , ... etc ,
: 这里其实我觉得还是直接用 45 个 switch-case 下去硬干会比较方便,
: 走 C 风格的话还是可以用 函式指标阵列,只是所有函式必须改写成
: void func(void *) 或是 int func( void *) ,至于 C++ 有没有比较好的解法?
: 嗯,我想是有的,只是我也没用过,也想知道。
当然是可以的,如果写不出来一定是TMP用得不够用力 (误
https://gist.github.com/PkmX/0fa65c755c39b676d79e
(请搭配 gcc-5.1 / clang-3.6 -std=c++1z 服用)
void f1(const int x) { std::cout << "f1: " << x << std::endl; }
void f2(const double x) { std::cout << "f2: " << x << std::endl; }
index_call(0, std::make_tuple(42), f1, f2); // f1(42)
index_call(1, std::make_tuple(42), f1, f2); // f2(42)
这里index_call的第一个参数是代表要call第几个function,
而第二个参数是要传给该function的参数们,用一个std::tuple包起来,
后面可以接若干个callback objects
注意到上面f1和f2的参数型态不一样,但是还可以放在一起选择呼叫
作者: BlazarArc (Midnight Sun)   2015-06-03 17:00:00
太over了XDDD
作者: Feis (永远睡不着 @@)   2015-06-03 17:06:00
不过我个人比较喜欢 func_set[key](..arguments) 这样的用法index_call 感觉很新潮~
楼主: PkmX (阿猫)   2015-06-03 18:06:00
把index_call稍微包装一下就有你想要的syntax了
作者: loveme00835 (发箍)   2015-06-03 22:39:00
新手路过问下, 如果有两个functor具相同回传型别呢?却要取用其中一个的回传值阿没事.. 有点混乱 ^^
作者: tropical72 (蓝影)   2015-06-04 11:27:00
好猛! vs 版本不够新的话似乎也只能干瞪眼 ? @@
作者: johnhmj (耗呆肥羊)   2015-06-10 23:55:00
cin.clear, cin.sync, cin.get

Links booklink

Contact Us: admin [ a t ] ucptt.com