传统上,类似于 template<typename T> T Add(T x, T y) { return x + y; } 这样的模板函数允许使用任何类型进行替换(即使是像 T=std::string 这样的类型,实际上它们不应该被“相加”)。

你可以定义一个“概念”(concept),它是一个逻辑条件,仅适用于满足该条件的某些类型。例如:

template<typename T> concept IS_ADDABLE = std::is_arithmetic<T>::value;

然后,我们可以限制允许的类型替换:

template<typename T> requires IS_ADDABLE<T> 
T Add(T x, T y) { ... }

这样,只有满足 IS_ADDABLE 条件的类型(例如算术类型)才能被用于 Add 函数的模板参数替换。

Last modified: Thursday, 30 January 2025, 1:13 PM