可变参数函数将const char *视为char const(&)[len]

以下代码两次生成函数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])
0000000100001100 T void log<char const (&) [9],char const (&) [5],char const (&) [4]>(char const (&) [9],char const (&) [4])

是否有一种方法可以使log像对待字符串const char*一样对待字符串,或者以其他任何不会导致每次调用都以二进制形式生成字符串的类型?当涉及到一个不匹配的小函数时,这没什么大不了的,但是很明显,当日志模块需要更多功能时,它变得更重了,我不希望每个日志调用都生成该函数。

zhengbanririye 回答:可变参数函数将const char *视为char const(&)[len]

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3102642.html

大家都在问