gpt4 book ai didi

c++ - 什么是 std::false_type 或 std::true_type?

转载 作者:行者123 更新时间:2023-11-30 01:01:39 29 4
gpt4 key购买 nike

我看到它的用法如下

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

那么,这里就用到了

template <typename T>
class RadarSensor
{
static_assert(DependentFalse<T>::value, "RadarSensor must be created using Identifier template");
};

我不知道它有什么用?

什么是 DependentFalse 结构?

最佳答案

std::false_type用作类型特征的构建 block ,定义为 std::integral_constant<bool, false> (我将在这里跳过)。它的定义归结为如下(简化):

struct false_type {
static constexpr bool value = false;
constexpr operator bool() const noexcept { return value; }
// There is more here, but it doesn't really matter for your question
};

类似地:

struct true_type {
static constexpr bool value = true;
constexpr operator bool() const noexcept { return value; }
// There is more here, but it doesn't really matter for your question
};

它用于表示 falsetrue作为类型。这在您让类模板继承自 std::false_type 的类型特征中很有用。或 std::true_type对于不同的(部分)特化,取决于模板参数满足的某些条件。这样做允许测试给定类型是否满足类型特征的条件,并通过访问静态 value 获得指示结果的编译时间常量 valuestd::false_type 继承的成员或 std::true_type或者通过使用转换运算符转换类型特征的实例来替代。

你在这里展示的是一个简单的类型特征,它总是(对于所有 T )评估为 std::false_type .它用于 static_asserts当实例化它们所在的模板时,它应该总是失败。这是必要的,因为 static_assert不依赖于模板参数的已经在定义点触发,而不是实例化点,因此使每个程序都包含类似 static_assert(false); 的内容格式错误。

关于c++ - 什么是 std::false_type 或 std::true_type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58694521/

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