2012-02-14 93 views
0

模板參數可以是常量表達式(§C.5),具有外部鏈接(§9.2)的對象或函數的地址,或者是指向成員的非重載指針(§15.5) 。用作模板參數的指針的格式必須爲&ooff,其中ooff是對象或函數的名稱,或者格式爲ff,其中ff是函數的名稱。指向成員的指針必須是&XX::ooff,其中ooff是成員的名稱。特別是,字符串文字不可接受作爲模板參數。有效的模板參數

這是來自stroustrup的書。什麼是允許的,什麼不是什麼的邏輯是什麼?爲什麼字符串不可接受?

我的理解是,編譯器應該能夠推導出參數的類型,以便它可以爲該給定類型內部生成代碼。感謝您的幫助

+1

可能重複的[字符串文字不允許作爲非類型模板參數](http://stackoverflow.com/questions/5547852/string-literals-not-allowed-as-non-type-template-parameters) – 2012-02-14 05:25:51

+0

那篇文章中的人解釋得比書本身好。這就是我正在尋找的。 – PnotNP 2012-02-14 09:01:32

回答

1

編譯器不會推導出非類型模板參數的類型。它們由程序員指定。沒有什麼可以推斷的。

這些要求是爲了確保編譯器能夠在編譯時確定兩個指針是否相等。這反過來又需要確定類模板(函數模板)的兩個用法是否指向相同的類型(函數)。