我知道這個..我認爲它一定是一些什麼幫助完整的你?
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