C++成员函数定义class前缀快捷方式(也是模板)
C++ member function definition class prefix shortcut (also template)
给定以下 class 声明:
template <int N>
class MyClass {
public:
MyClass();
~MyClass();
};
和以下定义:
template <int N>
MyClass<N>::MyClass() {
}
template <int N>
MyClass<N>::~MyClass() {
}
我有两个问题:
- 我是否每次都必须写
MyClass::
(有和没有模板)?
- 我必须在每个构造函数和析构函数之前写
template <int N>
吗?
来自[class.mfct]:
If the definition of a member function is lexically outside its class definition, the member function name shall be qualified by its class name using the :: operator.
如果你在class定义之外定义你的成员函数,你需要每次都写MyClass::
。由于 MyClass
是一个模板,您需要限定您正在定义 template <int N> MyClass<N>
成员函数。你的两个问题的答案都是肯定的(尽管对于 #2,它是针对 每个 成员函数——而不仅仅是构造函数和析构函数)。
给定以下 class 声明:
template <int N>
class MyClass {
public:
MyClass();
~MyClass();
};
和以下定义:
template <int N>
MyClass<N>::MyClass() {
}
template <int N>
MyClass<N>::~MyClass() {
}
我有两个问题:
- 我是否每次都必须写
MyClass::
(有和没有模板)? - 我必须在每个构造函数和析构函数之前写
template <int N>
吗?
来自[class.mfct]:
If the definition of a member function is lexically outside its class definition, the member function name shall be qualified by its class name using the :: operator.
如果你在class定义之外定义你的成员函数,你需要每次都写MyClass::
。由于 MyClass
是一个模板,您需要限定您正在定义 template <int N> MyClass<N>
成员函数。你的两个问题的答案都是肯定的(尽管对于 #2,它是针对 每个 成员函数——而不仅仅是构造函数和析构函数)。