3
只是一個簡單的問題,如果我有一個模板類:C++類的繼承和運算符重載;操作符重載是否被繼承?
template <typename T>
class foo {
public:
bool operator!=(foo& other) const {
//...
}
}
然後我繼承着稱類:
template <typename T>
class bar : public foo<T> {
//...
}
是否運算符重載得到繼承?如果不是,我將如何去實現它,這樣它...因爲目前在我的測試類,這帶來了一個錯誤:
for (bar<int> i(baz); i != bar<int>(); i++) {}
++運算符是在酒吧類中實現的,所以那是有效的,但是!=運算符顯然沒有被繼承。該錯誤信息是:
error: no match for 'operator!=' in 'i != bar<int>(0u, 0u)'
note: candidate is: bool foo<T>::operator!=(foo<T>&) const [with T = int]
這幾乎概括了我有這個問題,所以我只是想知道我怎麼會去繼承運算符重載。
不是您的問題的完整答案,但此類操作符應該作爲非成員函數實現。這將(解決你的問題(並在其他幾種方式表現更好) – jalf
@jalf:[它再次發生](http://xkcd.com/859/) –
但至少它發生在一個新的通常你會忘記關閉括號,這次我添加了一個'(',它絕對沒有任何意義!) – jalf