gpt4 book ai didi

c++ - C++ 中的标记和枚举分派(dispatch)有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 20:20:54 26 4
gpt4 key购买 nike

std::unique_lock 有几个接受 xxx_lock_t 的构造函数。这些是空结构:

struct adopt_lock_t {};
struct defer_lock_t {};
struct try_to_lock_t {};

它们对应的值如下。

constexpr adopt_lock_t  adopt_lock {};
constexpr defer_lock_t defer_lock {};
constexpr try_to_lock_t try_to_lock {};

最后,这里是 std::unique_lock 的构造函数。

unique_lock (mutex_type& m, adopt_lock_t tag);
unique_lock (mutex_type& m, defer_lock_t tag) noexcept;
unique_lock (mutex_type& m, try_to_lock_t tag);

我的问题是:

为什么他们使用这种标签而不是枚举类型?

我认为通过使用枚举,我们不需要为每种类型的锁定声明构造函数。我也同意,通过实现每个类型的构造函数,它不需要比较在实现中给出的锁类型。

主要原因是什么?

最佳答案

如果您使用enum,您必须在运行时确定在锁定时选择哪种模式,à la:

if(mode == lock::adopt_lock) {
...
} else if(mode == lock::defer_lock) {
...
}
else ...

通过重载,您可以将这种区别转移到编译时。

关于c++ - C++ 中的标记和枚举分派(dispatch)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200005/

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