如果函數的參數會在編譯時知道,是否正確將它變成模板參數?將「正常」參數變爲模板化參數是否正確?
採取下面的代碼作爲示例:
template<typename ... P> void
LOG
(const severity_level & l , const P & ... p)
{
// Take the parameters from 'p' and use it to construct a message.
// Then, prepend a string depending on the severity level specified.
}
作爲嚴重性水平始終一個編譯時間常數,我可以這樣做:
template<severity_level L , typename ... P> void
LOG
(const P & ... p)
{
// Call me like this: LOG<debug>("this is a debugging message")
}
隨着稍加修改到源代碼,我可以擺脫一個參數。這個解決方案有什麼缺點,還是很好?
最好的問候, Kalrish
P.S:這另一個好處是更容易編譯時過濾,在這個例子中,日誌記錄調用。
你自己提到了缺點:1)必須在編譯時知道,2)不再有「記錄一個函數」。請注意,* call網站*當然會在編譯時知道嚴重級別,但模板化版本禁止在日誌管道中的任何位置編寫通用代碼*。 – Jon
@DanielFrey你說得對,對不起。糾正。 – Kalrish
@ a.lasram這是一個枚舉示例。關於參考,我不明白你的意思。 FWIW,我剛剛修復了一個錯誤(將'typename L'改爲'severity_level L')。 – Kalrish