【发布时间】:2015-03-30 08:53:20
【问题描述】:
假设我正在编写一个函数来打印字符串的长度:
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 以支持非-arrays:
void foo(const char* s) {
std::cout << "raw, size=" << strlen(s) << std::endl;
}
但事实证明,这打破了我原来的预期用途:
foo("hello") // now prints raw, size=5
为什么?那不需要数组到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用?
【问题讨论】:
-
foo<>("hello");将调用模板,如果有帮助的话。我认为这是拒绝非模板的简单方法。并强制使用非模板使用(&foo)("hello")- 您可以获取非模板的地址,但不能获取模板的地址。 -
@LanguageLawyer 没有?这个问题的 why 部分非常突出——链接的问题没有问为什么,答案也没有回答为什么。这个答案可以。它们是相关的,但不是重复的。
标签: c++ arrays overload-resolution