【发布时间】:2021-09-25 20:18:53
【问题描述】:
我正在尝试检查第一个模板参数的类型是否与参数包中的至少一个元素相同,但是编译器给了我一个错误。我该怎么做?
template<typename TYPE, typename... x>
requires std::is_same_v<TYPE, x>...
class A
{
...
}
【问题讨论】:
我正在尝试检查第一个模板参数的类型是否与参数包中的至少一个元素相同,但是编译器给了我一个错误。我该怎么做?
template<typename TYPE, typename... x>
requires std::is_same_v<TYPE, x>...
class A
{
...
}
【问题讨论】:
您需要使用折叠表达式扩展可变参数包。由于您只希望在至少一个相同的情况下扩展它,因此您可以使用|| ... 来确保如果其中一个条件是true,它将解析true。
另外,由于您使用的是概念,您也可以使用std::same_as 概念:
#include <concepts>
template<typename TYPE, typename... x>
requires (std::same_as<TYPE, x> || ...)
// ^~
class A
{
};
【讨论】: