gpt4 book ai didi

c++ - 不允许非类型参数的部分模板特化

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:44 24 4
gpt4 key购买 nike

下面的代码不起作用,它给出了一个错误“Too few template arguments for struct foo”,我不明白为什么。在我看来,代码应该是有效的。我从 CPP 引用中找到了一个片段 here在“参数列表”部分的第 4 段中,这可能解释了为什么它不起作用,但我不明白。

template<int a, int b, int c> struct foo { };
template<int a> struct foo<a, 0, 0> { };

int main()
{
foo<1> f;
}

最佳答案

这是允许的。但是您的模板需要 3 个参数。专门化它并不会神奇地将它变成一个 1 参数模板。

您可以使其他参数具有默认参数,但是:

template<int a, int b = 0, int c = 0> struct foo { char _[1] ; };
template<int a> struct foo<a, 0, 0> { char _[10] ;};

int main() {
static_assert(sizeof(foo<1>) > sizeof(foo<1, 1, 1>), "");
return 0;
}

关于c++ - 不允许非类型参数的部分模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47284083/

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