gpt4 book ai didi

c++ - 为什么 tag_invoke 模式根本需要 Niebloid std::tag_invoke?

转载 作者:行者123 更新时间:2023-12-03 06:49:40 29 4
gpt4 key购买 nike

此问题假定您熟悉定制点管理技术 tag_invoke , 在 P1895R0 中介绍.
自定义点对象可以根据 P1895R0 定义为:

inline constexpr struct foo_cpo {
// simplified original by omitting noexcept forward and using auto arg
auto operator()(auto const &x) -> decltype( std::tag_invoke(*this, x) ) {
return std::tag_invoke(*this, x); // <--^-- here are the Niebloid
}
} foo;
但鉴于这种技术的关键是直接处理对象,并将所有 ADL 委托(delegate)给一个唯一商定的标识符 tag_invoke ,那么似乎可以通过简单地实现相同的效果,
inline constexpr struct {
auto operator()(auto const &x) -> decltype( tag_invoke(*this, x) ) {
return tag_invoke(*this, x); // no Niebloid. directly ADL call tag_invoke
}
} foo;
例如,来自 P1895R0 的类型删除示例,即 https://godbolt.org/z/3TvO4f , 可以在完全不使用 Niebloid 的情况下重新实现: https://godbolt.org/z/dzqE7b .代码与原文一字不差,取模Niebloid的定义 std::tag_invoke并对所有自定义点对象使用上述 ADL 形式。
Niebloid 的存在真正满足 tag_invoke 的要求是什么? ?

最佳答案

我不认为 tag_invoke 是绝对必要的本身就是一个函数对象。但是,如果我们认为有必要,将其定义为对象为我们提供了一个方便的地方来放置毒丸过载。将函数作为可以传递给高阶函数的一等公民通常很好。就是这样,真的。

关于c++ - 为什么 tag_invoke 模式根本需要 Niebloid std::tag_invoke?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63818871/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com