C++ 模板专题 - 参数约束

一:概述:

        除了使用SFINAE对模板参数进行约束之外,还可以使用概念(Concepts)来对模板参数进行约束,确保传入的类似满足特定条件。概念(Concepts)是C++20中引入的,概念是用于指定类型要求的一种机制。它们可以帮助你编写更清晰的代码,通过限制模板参数类型来提高类型安全性和可读性。requires 关键字用于定义这些类型要求,是C++20中为概念(Concepts)引入的关键字。

二:例子

#include <concepts>
#include <iostream>

// 定义一个概念,要求类型 T 必须支持加法操作
template<typename T>
concept Addable = requires(T a, T b) {
    { a + b } -> std::same_as<T>; // 要求 a + b 的结果类型与 T 相同
};

// 使用 Addable 概念约束模板参数
template<Addable T>
T add(T a, T b) {
    return a + b;
}

int main() {
    std::cout << add(3, 4) << '\n'; // 输出 7
    // std::cout << add("Hello", "World"); // 这将导致编译错误,因为字符串不支持加法
}
#include <iostream>
#include <vector>

template <typename>
struct Other;

template <>
struct Other<std::vector<int>> {};

template<typename T> 
concept TypeRequirement = requires {
    typename T::value_type; 
    typename Other<T>;     
};

int main() {

    std::cout << '\n';

    TypeRequirement auto myVec= std::vector<int>{1, 2, 3};

    std::cout << '\n';

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑不溜秋的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值