gpt4 book ai didi

c++ - 模板匹配两个(看似)不相关的类型

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:51 30 4
gpt4 key购买 nike

我有一个作用域枚举:

enum class E
{ A, B, C };

现在我想要一个函数,它接受该作用域 int 的值或 int 本身。

应该是这样的:

template <typename T, std::enable_if_t<std::is_same<T, enum E **OR** int>::value, int> = 0 >
void foo(T value);

但我不知道如何处理 C++ 模板中的 OR 概念。我知道 std::is_convertible,但我什至不知道我是否可以在这里使用它,因为你只能在 static_cast 范围内使用 enum s 到 int。

但无论如何,我不想接受任何可转换为 int 的类型,而只接受单个枚举或 int 的类型。

最佳答案

重载似乎是最简单的:

void foo(int value);
void foo(E value) { foo(static_cast<int>(value); } // Or specific code
template <typename T> void foo(T) = delete; // To forbid type convertible to int

否则你可以使用SFINAE

template <typename T>
std::enable_if_t<std::is_same<int, T>::value || std::is_same<E, T>::value>
foo(T value);

关于c++ - 模板匹配两个(看似)不相关的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991596/

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