0
我正在C++中爲我的應用程序創建一個記錄器類。該類具有靜態成員以將調試輸出記錄到文件。我想創建一個可以以兩種方式使用宏:爲{零,一個}參數重載預處理器宏
LOG("Log some text")
which calls Logger::log(std::string)
----- -----或
LOG << "Log some text" << std::endl;
which calls Logger::getLogStream()
目的在於包括Logger.h足夠登錄到文件,並使用相同的語法完成,但如果您有其他建議,我並不特別關注宏。不幸的是,使用Boost :: PP不是一種選擇。
我已經lookedaround(see this comment),但沒有發現任何關於區分LOG和LOG()的調用。我如何區分一個參數和沒有參數?
你不能。預處理器可能是編譯器的一部分,但它不遵循C或C++語言的規則,它是完全不同的語言,具有不同的語法和不同的語義規則。 –
是的,我已經想通了,因爲我搜索,發現沒有辦法。任何其他建議來完成此? Typedefs,內聯,宏或我可能錯過的東西? –
您可以定義一個類似函數的宏LOG(X)和一個名爲LOG的對象。沒有圓括號的'LOG'形式不受函數式宏擴展的影響。也可以定義一個重載'operator()'和'operator <<'的函數對象。 – dyp