[英]Default parameters of struct templates
我有一個模板struct tree_parse_info聲明如下:
template <
typename IteratorT,
typename NodeFactoryT,
typename T
>
struct tree_parse_info
{
// ...
};
編譯器允許以下代碼:
tree_parse_info<> m_info;
即使我們沒有模板結構tree_parse_info的默認模板參數,為什么也要編譯此代碼?
如果該類先前已被向前聲明,則無需重新聲明默認參數。 例如:
// forward declare only
template <typename T = int, size_t N = 10>
struct array;
// actual definition
template <typename T , size_t N>
struct array
{};
int main(void)
{
array<> a; // uses the defaults it saw in the forward-declaration
}
查看您的實際定義上方,看看是否轉發聲明了它。
順便說一句,如果在一個地方提供默認設置,而在另一個地方提供不同的默認設置,則會出現編譯錯誤:
template <typename T = int, size_t N = 10>
struct array;
// error: redefinition of default parameter
template <typename T = double , size_t N = 2>
struct array
{};
嘗試提供您顯示給我們的代碼,這些代碼可能不會偶然匹配,例如:
struct stupid_special_tag_type_lolroflwat {};
template <
typename IteratorT = stupid_special_tag_type_lolroflwat,
typename NodeFactoryT = stupid_special_tag_type_lolroflwat,
typename T = stupid_special_tag_type_lolroflwat
>
struct tree_parse_info
{
// ...
};
如果出現重定義錯誤,則說明您已在其他位置為它指定了默認值。
當我使用g ++編譯您的代碼時,出現以下錯誤:
tp.cpp:10:錯誤:模板參數數量錯誤(0,應為3)
因此,您必須編譯除顯示給我們的代碼以外的其他內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.