是否有一种语法可以将以下函数合并为一个,以便如果输入是 const,则结果是 const,如果输入不是 const,则结果也不是 const?
char* f1(char* x) {
return x+1;
}
const char* f2(const char* x) {
return x+1;
}
这个
char* f1(char* x) {
return x+1;
}
const char* f1(const char* x) { // rename f2->f1
return x+1;
}
不会使其成为“一个函数”,但它是一组重载,对于用户来说,它实际上是多个函数并不重要,除非他们尝试获取地址。
有很多方法可以避免重复实现,也许最简单的就是根据 const 实现非常量重载:
const char* f1(const char* x) {
return x+1;
}
char* f1(char* x) {
return const_cast<char*>(f1(static_cast<const char*>(x)));
}
在第二个重载中
x
指向非常量 char
,因此可以从另一个重载的结果中丢弃常量性。
您可以制作如下所示的函数模板:
template<typename T>
auto foo(T *ptr) requires(std::is_same_v<T, char> || std::is_same_v<T, const char>) {
return ptr+1;
}