我知道这个..我认为它一定是一些什么帮助完整的你?
defining a member function outside of its template
这也不行提供模板类的这样的一个成员函数的定义:
// This might be in a header file:
template <typename T>
class xyz {
void foo();
};
// ...
// This might be later on in the header file:
void xyz<T>::foo() {
// generic definition of foo()
}
这是不对的几个原因。所以是这样的:
void xyz<class T>::foo() {
// generic definition of foo()
}
正确的定义需要template关键字和相同的模板参数,类模板的定义声明。这样得到:
template <typename T>
void xyz<T>::foo() {
// generic definition of foo()
}
注意,还有其他类型的模板指令,因为成员模板等这样的,每一个需要他们自己的形式。重要的是要知道你有什么,所以你知道如何写每种口味。这尤其是因为一些编译器的错误信息可能不清楚哪些是错误的。当然,获得一本好的和最新的书。
如果你有一个模板中的嵌套成员模板:
template <typename T>
struct xyz {
// ...
template <typename U>
struct abc;
// ...
};
你是如何定义的xyz以外ABC?这不起作用:
template <typename U>
struct xyz::abc<U> { // Nope
// ...
};
也没有这样的:
template <typename T, typename U>
struct xyz<T>::abc<U> { // Nope
// ...
};
你将不得不这样做:
template <typename T>
template <typename U>
struct xyz<T>::abc {
// ...
};
注意它的...abc
不...abc<U>
因为ABC是 “主”模板。 IOWs,这不好:
//这里不允许: 模板模板struct xyz :: abc {};
我从来没有见过任何引用表明在类声明中定义方法主体使内联方法。我错过了什么吗? – Dathan 2010-01-20 17:53:15
@Dathan: 请看这里:http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.8 在这里:http://msdn.microsoft.com/en-us /library/bw1hbe6y%28VS.80%29.aspx – Ben 2010-01-20 17:56:42
@Dathan:你已经缺少C++标准的§9.3/ 2,它说:“一个成员函数可以在它的类定义中定义(8.4),其中它是一个内联成员函数......“编辑:另请注意,这是一个类定义 - 类声明是类似于:'class x;' – 2010-01-20 17:58:01