[問題] 請問不定參數函式怎寫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