- 主题:除了模板,还有什么办法可以传递可变参数?
一个log类,传递可变参数,现在用的模板传递可变参数:
template <typename... Args>
inline bool log_info(const char* fmt, Args&&... args)
{
std::string strMSG = BuildMessage(fmt, std::forward<Args>(args)...);
return logInstance->stdlogfmt(mylog::info, strMSG);
}
由于log类到处在用,导致编译后的库文件很大
模板中BuildMessage()用的fmtlib以格式化字符串,似乎也用不了va_list
有什么好的非模板的解决方法?
--
FROM 123.116.155.*
你这个貌似无解
变参无非就是变参模板或者va_list,没有第三条路可走
尺寸大,能精简的是什么内容?每条log语句的传参和fmt::format( )精简不了
不用fmt::format的话,得回到sprintf或者<<的老路。
--
修改:z16166 FROM 222.130.136.*
FROM 222.130.136.*
好吧,用了模板后编译出来的lib比原来没用模板没用fmtlib大了100多M,不知道对程序性能有没有影响。不过最后编译出来的exe大小倒是差不多。
【 在 z16166 (Netguy) 的大作中提到: 】
: 你这个貌似无解
:
: 变参无非就是变参模板或者va_list,没有第三条路可走
:
--
修改:miui FROM 114.252.227.*
FROM 114.252.227.*
为了用fmtlib才用的模板,之前跟您一样,没用模板
【 在 ylh0315 (ylh0315) 的大作中提到: 】
: 我的办法是,不做log类,做成库函数代码就一份。
: showlog(level,format,...);
: format 与 printf一样用法。
: log的去向由配置决定。
--
FROM 114.252.233.*
lib就是obj堆积,没优化掉没引用到的代码
exe一般会把没引用到的变量和函数优化掉
用这个工具看看
https://github.com/google/bloaty
【 在 miui 的大作中提到: 】
: 好吧,用了模板后编译出来的lib比原来没用模板没用fmtlib大了100多M,不知道对程序性能有没有影响。不过最后编译出来的exe大小倒是差不多。
--
修改:z16166 FROM 222.130.136.*
FROM 222.130.136.*
好的我看一下,多谢
【 在 z16166 的大作中提到: 】
: lib就是obj堆积,没优化掉没引用到的代码
: exe一般会把没引用到的变量和函数优化掉
: 用这个工具看看
: ...................
--
FROM 123.116.155.*