gpt4 book ai didi

c++ - 识别模板中的值是 bool

转载 作者:可可西里 更新时间:2023-11-01 15:05:15 25 4
gpt4 key购买 nike

这个简短的 C++17 程序:

#include <iostream>

template <typename T> void output(T x)
{
if constexpr (std::is_integral<decltype(x)>::value) {
std::cout << static_cast<int>(x) << " is integral" << std::endl;
} else {
std::cout << x << " is not integral" << std::endl;
}
}

int main()
{
char x = 65;
output(x);

bool t = true;
output(t);

return 0;
}

有这样的输出:

65 is integral
1 is integral

在名为output 的模板函数中, 如何检测到参数 x是 bool 值而不是数字?

计划是用std::cout << std::boolalpha <<输出值, 但前提是类型是 bool .

最佳答案

std::is_integral 检查类型是否为以下类型之一:boolcharchar16_t, char32_t, wchar_t, short, int, long, 长长 ( source )。如果你想检查一个类型是否与另一个类型相同,可以使用 std::is_same。两者可以组合以获得想要的结果:

template <typename T> void output(T x)
{
if constexpr (std::is_integral<decltype(x)>::value && !std::is_same<decltype(x), bool>::value) {
std::cout << static_cast<int>(x) << " is integral but not a boolean" << std::endl;
} else {
std::cout << x << " is not integral" << std::endl;
}
}

或者,因为我们已经知道 decltype(x) 的类型,即 T:

template <typename T> void output(T x)
{
if constexpr (std::is_integral<T>::value && !std::is_same<T, bool>::value) {
std::cout << static_cast<int>(x) << " is integral but not a boolean" << std::endl;
} else {
std::cout << x << " is not integral" << std::endl;
}
}

另一种方法是使用模板特化。这确保使用其他重载来处理 bool 值。

template <typename T> void output(T x)
{
if constexpr (std::is_integral<T>::value) {
std::cout << static_cast<int>(x) << " is integral but not a boolean" << std::endl;
} else {
std::cout << x << " is not integral" << std::endl;
}
}

template <> void output(bool x)
{
std::cout << x << " is a boolean" << std::endl;
}

关于c++ - 识别模板中的值是 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859172/

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