【发布时间】:2021-02-24 23:32:20
【问题描述】:
我尝试为几种类型专门化一个模板函数,其中之一是 const char*。
template<typename T = const char*>
void f(T&&);
template<>
void f<int>(int&& k) { std::cout << "Now in int fcn (" << k << ")!\n"; }
template<>
void f<const char*>(const char* && k) { std::cout << "Now in cc* fcn (" << k << ")!\n"; }
int main() {
f<int>(5);
f("HELLO");
return 0;
}
但是当我执行 f("HELLO") 时,我得到以下错误:
main.cpp:(.text+0x32): undefined reference to `void f<char const (&) [6]>(char const (&) [6])'
如何让它将“HELLO”解释为 const char* 而不是数组?如果我专门研究数组,每个数组大小都需要一个?
此外,通用模板函数捕获 f("HELLO"):
template<typename T>
void f(T&& k) { /* Definition... */ }
它会为我需要的每个数组大小创建一个特化,还是以某种方式将字符串文字转换为“const char*”?
【问题讨论】:
标签: c++ templates string-literals forwarding-reference