你可以使用类型模板参数来限制函数接受的参数类型。以下是一个示例代码:
#include
#include
template && (sizeof(T) == 1), bool> = true>
void processLiteral(T literal) {
std::cout << "Accepted literal: " << literal << std::endl;
}
int main() {
processLiteral(0); // Accepted literal: 0
processLiteral(1); // Accepted literal: 1
processLiteral(2); // 编译错误:不接受参数2
processLiteral('0'); // 编译错误:不接受字符字面值
return 0;
}
在这个示例中,processLiteral
函数接受一个类型为int
的字面值参数 literal
。使用std::enable_if_t
和std::is_same_v
来限制参数类型只能是int
,并且使用sizeof
来限制参数大小必须为1字节。如果参数类型和大小满足限制,则函数可以被调用。否则,编译器会报错。
请注意,在这个示例中,processLiteral
函数也接受了字符字面值作为参数。如果你只想接受整型字面值,可以更改模板参数限制。例如,使用std::is_integral_v
来限制参数类型必须是整型:
template , bool> = true>
void processLiteral(T literal) {
// ...
}
这样,processLiteral
函数只接受整型字面值作为参数。