gpt4 book ai didi

c++ - 将模板嵌套类的方法定义移到声明之外

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:32 26 4
gpt4 key购买 nike

是否可以将方法定义移到声明之外?

template <typename T1>
class A
{
template <bool T2>
class B;

template<>
class B<true>
{
void f() { /* Do smg */ }
}
class B<false>
{
void f() { /* Do smg else */ }
}
}

如果我尝试在类声明之外定义 f(),就像这样

template <typename T1>
template <>
void A<T1>::B<true>::f() { /* Do smg */ }

编译器给出错误 C3855:模板参数 T2 与声明不兼容。

最佳答案

您不能显式特化非特化类模板的类成员模板,来自 [temp.expl.spec]:

In an explicit specialization declaration for a member of a class template or a member template that appears in namespace scope, the member template and some of its enclosing class templates may remain unspecialized, except that the declaration shall not explicitly specialize a class member template if its enclosing class templates are not explicitly specialized as well.

即使 A 定义中的 B 的显式特化也是错误格式的。如果您需要做这样的事情,我根本不会为 B 使用成员类模板。

关于c++ - 将模板嵌套类的方法定义移到声明之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361868/

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