gpt4 book ai didi

c++ - 如何否定 std::is_integral 用于标签分派(dispatch)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:19:06 26 4
gpt4 key购买 nike

我一直在研究标签分派(dispatch),下面的代码完全符合我的预期:

#include <type_traits>
#include <iostream>

void impl(std::true_type) { std::cout << "true\n"; }
void impl(std::false_type) { std::cout << "false\n"; }

template<typename T>
void dispatch(T&& val)
{
impl(std::is_integral<typename std::remove_reference<T>::type>());
}

int main()
{
dispatch(10); // calls impl(std::true_type)
dispatch(""); // calls impl(std::false_type)
}

但是如果我想否定条件,我就会遇到麻烦。我以为我可以在 dispatch 中的代码中添加一个“!”,

impl(!std::is_integral<T>());    // added "!"

但这不会编译。

我需要做什么才能使此代码正常工作?

最佳答案

您可以为 std::integral_constant 实现 operator !(true_typefalse_type 的基础类型) :

template <typename T, T value>
inline constexpr std::integral_constant<T, !value>
operator ! (std::integral_constant<T, value>)
{ return {}; }

这似乎是可以轻松标准化的方便的小东西之一。

关于c++ - 如何否定 std::is_integral 用于标签分派(dispatch)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197494/

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