以下代码两次生成函数log
:
#include <iostream>
template<typename... Args>
void log(Args && ...args) {
(std::cout << ... << args);
(std::cout << std::endl);
}
int main() {
log("Testing ", " my ", "log");
log("log ", " appears ", " twice :(");
return 0;
}
nm
的输出:
$ nm -a test | grep log | c++filt
0000000100001160 T void log<char const (&) [5], char const (&) [10], char const (&) [10]>(char const (&) [5], char const (&) [10], char const (&) [10])
0000000100001100 T void log<char const (&) [9], char const (&) [5], char const (&) [4]>(char const (&) [9], char const (&) [5], char const (&) [4])
是否有一种方法可以使log
像对待字符串const char*
一样对待字符串,或者以其他任何不会导致每次调用都以二进制形式生成字符串的类型?当涉及到一个不匹配的小函数时,这没什么大不了的,但是很明显,当日志模块需要更多功能时,它变得更重了,我不希望每个日志调用都生成该函数。