Lancern's Treasure Chest
P3312: Overload Set Types 目前,如下的代码片段无法编译: std::vector<float> v = {1, 2, 3, 4}; std::ranges::transform(v, v.begin(), std::sin); 这是因为 std::sin 具有多个重载: float sin(float); double sin(double); long double sin(long double); template <typename T> double sin(T);…
对这个问题,我曾经有个 workaround 是
但是这有个问题,比如还是用 sin 举例,那么 requires { FN(sin)(1, 2) } 会得到一个 true,但实际上 sin 不能支持多个参数调用
隔壁群主 @lancern 给出了一个更强的 workaround 能解决这个问题,让我们一起领略现代 C++ 的美感!
#define FN(f...) [&]<typename... Args>(Args&&... args)->decltype(auto){return (f)(std::forward<Args>(args)...);}但是这有个问题,比如还是用 sin 举例,那么 requires { FN(sin)(1, 2) } 会得到一个 true,但实际上 sin 不能支持多个参数调用
隔壁群主 @lancern 给出了一个更强的 workaround 能解决这个问题,让我们一起领略现代 C++ 的美感!