【问题标题】:C++ member function definition class prefix shortcut (also template)C++ 成员函数定义类前缀快捷方式(也是模板)
【发布时间】:2015-04-23 13:55:39
【问题描述】:

给定以下类声明:

template <int N>
class MyClass {

public:
    MyClass();
    ~MyClass();
};

以及以下定义:

template <int N> 
MyClass<N>::MyClass() {
}

template <int N>
MyClass<N>::~MyClass() {
}

我有两个问题:

  1. 我是否必须每次都写MyClass::(有和没有模板)?
  2. 我必须在每个构造函数和析构函数之前写template &lt;int N&gt;吗?

【问题讨论】:

  • 是的,是的。其他任何事情都会变得模棱两可之类的,不是吗?
  • 宏可能有助于减轻此类样板的负担。
  • @灵溪神号。不不不不不不不不。没有。没有。
  • 顺便说一句:我建议阅读 this FAQ 关于模板(和 other things)。
  • @eclipse 嘿,我正要为你刚才问的 C++ 链接错误问题写一个答案。如果您还没有修复它,简短的回答是 inline 函数绝对必须在标题中定义。因此,要么将其全部放在标题中,要么删除inline,然后再次拆分。希望对你有帮助。

标签: c++ class templates definition


【解决方案1】:

来自 [class.mfct]:

如果成员函数的定义在其类定义之外,则成员函数名应使用 :: 运算符由其类名限定。

如果你在类定义之外定义你的成员函数,你需要每次都写MyClass::。由于MyClass 是一个模板,您需要限定您正在定义template &lt;int N&gt; MyClass&lt;N&gt; 成员函数。您的两个问题的答案都是肯定的(尽管对于 #2,它适用于 每个 成员函数 - 不仅仅是构造函数和析构函数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2018-01-28
    相关资源
    最近更新 更多