gpt4 book ai didi

c++ - 结构模板的默认参数

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:42 24 4
gpt4 key购买 nike

我有一个模板结构 tree_parse_info 声明如下:

template <
typename IteratorT,
typename NodeFactoryT,
typename T
>
struct tree_parse_info
{
// ...
};

编译器允许以下代码:

tree_parse_info<> m_info;

为什么即使我们没有模板 struct 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
{
// ...
};

如果您遇到重定义错误,则表明您已经在其他位置为其提供了默认值。

关于c++ - 结构模板的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2107934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com