我想創建一個基類,它將被其他對象繼承,以便它們可以存儲在同一個容器中。該基類將包含一個模板化方法,該方法將該函數定義爲用於訪問多線程系統中的緩衝區的setter或getter。我想要做這樣的事,但不知道如何實施Linky。此外,我希望能夠在基地的功能是虛擬的,並在派生類中定義功能,我知道你實際上不能有一個虛擬模板函數,但有沒有一種方法來編碼它的方式它的作用就像虛擬模板功能的概念。下面是我想如何佈局的粗略示例。通過回調調用do_work方法。回調作爲參數傳遞給線程。具有模板函數的繼承類
class A {
template<typename R, typename P>
virtual R do_work(P param) = 0;
}
class B : public A {
template<void,int> // declare as setter
R do_work(P param){/*do something*/ return R;}
}
class C : public A {
template<int,void> // declare as getter
R do_work(P param){/*do something*/ return R;}
}
在鏈接文章中的問題,如果第一個模板參數是「void」,如何做一些不同的事情。我認爲答案是使用'boost :: enable_if'來啓用 - 禁用兩種替代實現中的一種。 - 但不確定,你的問題如何與之相關聯。 – UncleBens 2010-10-19 14:55:57
是否有可能編寫一個測試R是否等於void的宏,如果沒有,則使用此函數(如果不使用具有模板返回類型的函數)。 – Talguy 2010-10-19 15:06:39
另一個問題:你不期待'P'是無效的,給出像'R do_work(void param)'這樣的簽名? – UncleBens 2010-10-19 15:10:59