[问题] 请问不定参数函式怎写override?

楼主: Keitaro (动き出す时间...)   2020-07-16 22:57:26
开发平台(Platform): (Ex: Win10, Linux, ...)
win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Visual studio 2008
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
请问不定参数函式 怎写override?
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
http://codepad.org/68O4dTXM
补充说明(Supplement):
上方连结的程式码是个示意example
假设CBaseLogger已经是一个做好的logger
基本功能(开档写档)都在CBaseLogger::Log()里面了
CDerivateLogger仅仅是加入一个flag 用来开启or关闭写log的功能
请问此处我该如何撰写关于CDerivateLogger::Log()这个函式的override才正确呢?
先在此感谢各位板友。
补充:
我发现这问题时看到奇怪的现象
1. 一开始我没发现CDerivateLogger::Log()这样写是有问题的
Log档里面写出来的是对的
2. 后来我为了要debug, 因此把VC的optimize关闭, 然后发现突然程式会crash
有时候没有crash, 但Log里面写出来一堆乱码
3. 我仔细看code后才发现这边可能有问题, 但即使如此, 为何在release build的情况下
Log竟然能写出正确的值?
是否va_start/va_list/va_end这几个function在release build能够找到正确的参数?
作者: Lipraxde (Lipraxde)   2020-07-16 23:06:00
看起来比较像是要问怎么传 varargshttps://bit.ly/2CJp3UV
作者: nh60211as   2020-07-16 23:38:00
我猜release build直接去call CBaseLogger::Log
作者: Lipraxde (Lipraxde)   2020-07-16 23:53:00
Release build 的时候可能是被优化成 tail call 了。由于 varargs 是放在 stack 上传的,所以 CBaseLogger::Log 可以拿到传入的参数。

Links booklink

Contact Us: admin [ a t ] ucptt.com