Nimrod

Nimrod

V2EX 第 357509 号会员,加入于 2018-10-22 08:03:23 +08:00
今日活跃度排名 152
根据 Nimrod 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
Nimrod 最近回复了
@lupus721 没回复上,见楼上。
CF 是提供了 API 获得所有 colo 的,比如这个 repo https://github.com/Netrvin/cloudflare-colo-list
以及原作者自己列举的 https://github.com/hackermondev/cf-teleport/blob/main/scripts/data/colos.json
至于为什么明文返回,可能 CF 觉得不是很重要吧。
@kk2syc 地理猜测原理跟三角定位类似,但是这个“开盒”是完全没有交互的。
5 天前
回复了 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 这是什么神奇的食谱,有科学依据么?
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1041 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
Developed with CodeLauncher
♥ Do have faith in what you're doing.