gpt4 book ai didi

c++ - 成员函数的部分特化

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:12 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
“invalid use of incomplete type” error with partial template specialization

为什么我可以这样做:

template <typename T>
struct A
{
void foo(int);
};

template <>
void A<int>::foo(int)
{
}

但不是这个:

template <typename> struct C {};

template <typename T>
struct A
{
void foo(int);
};

template <typename T>
void A<C<T> >::foo(int)
{
}

对于第二种情况,GCC 给出如下错误:

test.cpp:10:23: error: invalid use of incomplete type 'struct A<C<T> >'
test.cpp:4:8: error: declaration of 'struct A<C<T> >'

编辑:

在解释为什么不允许使用第二个示例时,还请考虑使成员函数也成为模板对哪个示例有效和哪个无效没有影响。也就是说,这仍然有效:

template <typename T>
struct A
{
template <typename U>
void foo(U);
};

template <>
template <typename U>
void A<int>::foo(U)
{
}

但这不是:

template <typename> struct C {};

template <typename T>
struct A
{
template <typename U>
void foo(U);
};

template <typename T>
template <typename U>
void A<C<T> >::foo(U)
{
}

所以原因不可能是函数模板只能完全特化,因为第三个例子不是完全特化(模板参数 U 仍然存在),但它仍然有效。

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