You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中创建概念以检查所有给定类型参数是否互不相同?

实现检查所有类型参数互不相同的Concept

你已经实现了检查第一个类型参数与其余所有类型参数不同的different概念:

#include <concepts>

template<typename TYPE, typename... TYPES>
concept different = ((!std::same_as<TYPE, TYPES>) && ...);

要实现所有给定类型参数彼此都互不相同的概念,有两种直观的实现方式:

方式一:递归复用已有概念

利用递归思路,先检查第一个类型和剩余所有类型都不同,再递归验证剩余类型是否也满足全不同,同时处理边界情况:

// 边界情况:0个或1个类型时,天然满足互不相同
template<typename... TYPES>
concept all_different = (sizeof...(TYPES) <= 1);

// 递归检查:第一个类型与其余所有不同,且剩余类型也满足全不同
template<typename FIRST, typename SECOND, typename... REST>
concept all_different = different<FIRST, SECOND, REST...> && all_different<SECOND, REST...>;

这种方式逻辑清晰,复用了已有的different概念,容易理解。

方式二:纯折叠表达式实现

如果不想依赖递归,也可以用嵌套折叠表达式直接完成检查,对每个类型都验证它与后续所有类型不同:

#include <concepts>

template<typename... TYPES>
concept all_different = []<typename... Ts>(Ts...) {
    // 对每个类型Ts,检查它与后面所有类型Us都不同
    return (([]<typename T, typename... Us>(T, Us...) {
        return ((!std::same_as<T, Us>) && ...);
    }(Ts{}, Us{}...)) && ...);
}(TYPES{}...);

这种方式不需要额外前置概念,通过lambda和模板参数推导直接完成全量检查。

内容的提问来源于stack exchange,提问作者AKL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:53:12