C++ 模板约束与命名空间详解
1. 模板约束
1.1 函数模板约束
在 C++ 中,可以对函数模板添加约束,以确保模板参数满足特定条件。例如,下面的代码展示了如何约束 size
函数:
template<class T>
auto size(T const& container)
requires
requires(T container) {
container.size();
typename T::size_type;
{ container.size() } -> std::same_as<typename T::size_type>;
}
{
return container.size();
}
上述代码中, container.size()
约束检查该表达式是否有效,即 size()
成员函数是否可用。若有效,编译器会检查第二个要求 typename T::size_type
,确保模板参数有 size_type
类型成员。若第二个要求也满足,编译器会检查第三个要求,使用 std::same_as
概念确保 container.size()
的返回类型是 T::size_type
。
也可