V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Nimrod  ›  全部回复第 1 页 / 共 12 页
回复总数  224
1  2  3  4  5  6  7  8  9  10 ... 12  
18 小时 32 分钟前
回复了 aqtata 创建的主题 C++ 这种情况如何消除几百个 if/else
运行时值到类型的分发,具体的,这里就是`N` 到 `void foo<N>(myclass<N>&)`。
这里存在一个问题需要楼主表达清楚,对应类型的参数是如何构造出来的。
这里为作简化`void foo<N>()`

核心逻辑是做一次`int V`到`std::integral_constant<int, V>`的映射,再用 lambda 包装一下原本的`foo<N>`使得能用上推断出来的类型。

```cpp
#define DISPATCH(VALUE) \
case VALUE: \
return f(std::integral_constant<int, VALUE>{});


// trampline function
template <typename F>
auto dispatcher(F&& f, int value) {
switch(value) {
DISPATCH(0x1f0)
DISPATCH(0x1f1)
DISPATCH(0x1f2)
default:
throw std::runtime_error("Unregistered value");
}
}

void foo_wrapper(int num) {
dispatcher([](auto type){
constexpr auto v = decltype(type)::value;
foo<v>();
}, num);
}
```
这里,`dispatcher`是可以完全可以复用的。
[Demo]( https://godbolt.org/z/5TdevE4We)

剩下的就是手动`DISPATCH(N)`来注册你需要的值,也可以使用 BOOST_PP_REPEAT 来生成代码。
[Demo]( https://godbolt.org/z/1893bzEs8)

运行时的类型分发可以参考我的这篇博客,https://nimrod.blog/posts/cpp-elegant-ways-to-map-runtime-values-to-types
@lovelylain #43 快炸了有准备方案么?先把下一个 AIO 准备好,随时顶上。
@Seria #94 这是什么神奇的食谱,有科学依据么?
2023-01-10 13:52:26 +08:00
回复了 ebony0319 创建的主题 C++ 我想直接学 C++ 20 有推荐的资料么
推荐 [C++20 - The Complete Guide]( https://leanpub.com/cpp20)

@aqtata 简单看了下,C++20 相关完成度非常低。
2022-02-03 23:55:06 +08:00
回复了 elliotloststh 创建的主题 推广 搭了个 blog,现在有五篇文章了,欢迎大佬来玩
@leimao #5 有幸拜读过一些文章,赞👍
2022-02-02 23:23:41 +08:00
回复了 jdz 创建的主题 C++ 怎么系统学习下模板,求推荐书籍,博客
推荐两本书
1. C++ Templates: The Complete Guide 2nd Edition
2. [C++ Concepts]( https://leanpub.com/cppconcepts/)
2021-10-12 23:22:39 +08:00
回复了 zxCoder 创建的主题 Python 这里搞 AI 的多吗,问个问题
想起来之前有个同事反应过,conda 行为具有随机性。并不知道是不是相关 hh
2021-01-19 12:22:28 +08:00
回复了 FaiChou 创建的主题 程序员 如何提升 Vim 技巧?
补充一个实用性没有那么强的网站 http://vimgolf.com/ ,用尽可能少的 keystroke 来完成目标
2020-12-26 18:11:26 +08:00
回复了 unclebob 创建的主题 上海 上海租房 1~ 3 个月有哪些靠谱的途径呢?
直接酒店长住三个月?
2020-12-26 17:53:26 +08:00
回复了 pisir 创建的主题 Notion Notion 太 tm 好用了!
notion 相比于 typora 的优势在哪?另外 notion 的 table 支持似乎不太友好。
我 b 站经常遇到闪屏现象,只能在 b 站遇到。怀疑是 b 站问题。。
1  2  3  4  5  6  7  8  9  10 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2942 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 40ms · UTC 07:30 · PVG 15:30 · LAX 23:30 · JFK 02:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.