当前位置: 首页 > 知识库问答 >
问题:

类模板特殊成员函数显式专门化

何玺
2023-03-14
template <typename T>
class A
{
public:
    A()
    { /* some definition */}
};

template <>
A<int>::A()
{ /*explicit specialization def body*/} // this is OK
template <typename T>
class B
{};

template <>
B<int>::B()
{ /*explicit specializationdef body */} // this is forbidden by ISO c++
                                        // and when compiling with VS2013 gives compile error
                                        // cannot define a compiler-generated special member
                                        // function (must be declared in the class first)

共有1个答案

阴元青
2023-03-14

它与成员函数定义的正常工作方式一致。您只能定义您先声明的函数。例如,这将无法编译:

struct B {
};

B::B() {
}

构造函数是隐式声明的,因此不能显式定义。

您引用的段落说,这对于模板专门化是一样的。

 类似资料:
  • 在本文中,他们说(c)是(b)的显式专门化。我的疑问是,为什么我们不能说它是(a)的显式专门化?因为我们可以为任何特定类型专门化模板。所以,当专门化int*时,为什么他们说(c)显式专门化(b)。 任何评论都将有助于理解事情。

  • 我有以下模板方法: 但是我得到了那些奇怪的链接错误: /usr/lib/gcc/x86_64-redhat-linux/4.4。7/../../../../包括/c/4.4。7/例外:62:void MyStruct::readField(std::basic_istream)的多重定义 如何专门化此成员函数? 编辑 这种方法在以下方面起作用: 或者使用s或在类外使用

  • 考虑上面的代码,在中,它是成员类模板成员的明确专门化定义。一些规则将适用于以下规定: 临时雇员爆炸。规格#5 显式特化类的成员不会从类模板的成员声明中隐式实例化;相反,如果需要定义,则应显式定义类模板特化的成员本身。在这种情况下,类模板显式特化的定义应在定义成员时处于范围内。显式特化类的定义与生成的特化的定义无关。也就是说,其成员不必与生成的特化的成员具有相同的名称、类型等。显式特化类模板的成员的

  • 是否有人知道此显式特化是否有效: clang 主干 (12/3/2013) 给出以下错误: f:...\test.cpp:36:20: 错误: 从类 'O' 中出线定义 “Fun” 没有定义 1生成错误。 任何来自标准的支持参考来证明你的答案将不胜感激! 注意:我有点惊讶这是一个错误——我认为应该为任何以< code >开始实例化“Fun”的模板参数族选择专门化 这是一个叮当的错误还是我期望中的错

  • 顺便说一句,我确实编译了以下内容,但是专门化在运行时没有像预期的那样工作。基类型和派生类型最终要经历的非专用版本。 正确的语法是什么?

  • 我试图调用一个模板类成员函数专门化,它从类的构造函数中返回一个值,但我似乎找不到正确的语法(如果存在的话)。下面是我的代码,下面是来自编译器(而不是链接器)的错误消息。 错误消息:g++-std=c++11-o t1 t1.cpp t1.cpp:19:18:错误:在'constexpr'模板constexpr const char*name()之前需要'<';^T1.CPP:22:26:错误:“c