我試圖得到一些簡單的基於模板的設計工作,並偶然發現模板相互依賴。現在我知道我可以通過將EventHandler方法轉換爲模板而不是整個類來使用虛函數和(在這個特殊的情況下)來解決這個問題。但是有沒有辦法有兩個相互依賴的模板,只要它們互相使用指針?模板類可以互相依賴,只要它們不嘗試存儲對方的實例?
這簡化的示例:
typename MySocket;
template<typename SocketClass> struct EventHandler {
void receiveCallback(SocketClass *s) {
}
};
template <typename HandlerType> class Socket {
HandlerType *handler;
};
typedef EventHandler<MySocket> MyHandler ;
typedef Socket<MyHandler> MySocket ;
MyHandler h;
MySocket socket;
int main() {
return 0;
}
對於這個代碼編譯給出了一個錯誤,指出插座被重新定義。有任何想法嗎? C++ 11/14對我來說很好。
什麼是很第一行應該這樣做? – DeiDei
'typename MySocket;'是無效的C++。你應該得到一個錯誤。 –
當然,我嘗試了A可以想到的任何東西。這意味着作爲一個前向聲明,事後明顯它是錯誤的。 –