英文:
How to create a concept to check if all the given type parameters are different in C++?
问题
如何检查所有给定的类型参数彼此不同?
英文:
A concept which checks if the first given type parameter is different from the rest of type parameters is as following:
template<typename TYPE, typename ... TYPES>
concept different = ((not std::same_as<TYPE, TYPES>) and ...);
(std::same_as
is from <concepts>
standard library)
But how to check if all the given type parameters are different from each other?
答案1
得分: 1
这是一个你可以使用的概念的示例:
#include <type_traits>
template<typename arg_t, typename... args_t>
static consteval bool all_unique()
{
if constexpr (sizeof...(args_t) == 0ul)
{
return true;
}
else
{
return (!std::is_same_v<arg_t, args_t> && ...) && all_unique<args_t...>();
}
}
template<typename... args_t>
concept AllUnique = all_unique<args_t...>();
template<typename...args_t>
void f(args_t... args) requires AllUnique<args_t...>
{
}
int main()
{
static_assert(all_unique<int>());
static_assert(all_unique<int, bool>());
static_assert(!all_unique<int, bool, int>());
static_assert(AllUnique<int>);
static_assert(AllUnique<int, bool>);
static_assert(!AllUnique<int, bool, int>);
f(1);
f(1, true);
// f(1, 2); // 确实不会编译
return 0;
}
注意:这只是提供了代码的翻译,没有其他额外的内容。
英文:
This an example of the concept you can use :
#include <type_traits>
template<typename arg_t, typename... args_t>
static consteval bool all_unique()
{
if constexpr (sizeof...(args_t) == 0ul)
{
return true;
}
else
{
return (!std::is_same_v<arg_t, args_t> && ...) && all_unique<args_t...>();
}
}
template<typename... args_t>
concept AllUnique = all_unique<args_t...>();
template<typename...args_t>
void f(args_t... args) requires AllUnique<args_t...>
{
}
int main()
{
static_assert(all_unique<int>());
static_assert(all_unique<int,bool>());
static_assert(!all_unique<int, bool, int>());
static_assert(AllUnique<int>);
static_assert(AllUnique<int, bool>);
static_assert(!AllUnique<int, bool, int>);
f(1);
f(1, true);
// f(1, 2); // indeed does not compile
return 0;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论