假设我正在编写一个函数来打印字符串的长度:
template <size_t N>
void foo(const char (&s)[N]) {
std::cout << "array, size=" << N-1 << std::endl;
}
foo("hello") // prints array, size=5
现在,我想扩展foo以支持非数组:
void foo(const char* s) {
std::cout << "raw, size=" << strlen(s) << std::endl;
}
但是事实证明,这破坏了我最初的预期用法:
foo("hello") // now prints raw, size=5
为什么?不需要模板到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用?
侃侃无极