gpt4 book ai didi

c++ - 从 std::true_type 继承 vs static constexpr const bool 成员

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:20 26 4
gpt4 key购买 nike

我知道这不是一个非常尖锐的问题。使用一个比另一个有优势(编译时间、依赖性、调试符号大小、可用性、可读性等)吗?

template < typename T >
struct IsSharedPtr : std::false_type
{
};

对比

template < typename T >
struct IsSharedPtr
{
static constexpr bool value = false;
};

相关问题...

template < typename T, typename Enabler >
struct S;

template < typename T >
struct S < T, std::true_type >{};

template < typename T >
struct S < T, std::false_type >{};

对比

template < typename T, bool enabler >
struct S;

template < typename T >
struct S < T, true >{};

template < typename T >
struct S < T, false >{};

最佳答案

继承自 true_type/false_type 已经为您提供了相应的 value 成员、函数调用运算符和到 bool 的隐式转换。此外,如果您将使用继承,您的类型将符合标签分派(dispatch)的条件,这通常比 SFINAE 更清晰、更容易:

namespace detail 
{
template <typename T>
void do_work(T& foo, std::true_type);

template <typename T>
void do_work(T& foo, std::false_type);
}

template <typename T>
void do_something(T& foo)
{
//Selects overload depending on type of IsSharedPtr<T>
detail::do_work(foo, IsSharedPtr<T>{})
}

关于c++ - 从 std::true_type 继承 vs static constexpr const bool 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37700976/

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