使用boost::any實現virtual template成員函數
如你所知,C++中沒有提供virtual template function。然而有時候你的確會有這種需要,any可以一定程度上滿足這種需要,例如,
1?
class?Base
?2?
{
?3?
public:
?4?
????????virtual?void?Accept(boost::any?anyData)
?5?
????????{
?6?
????????????????
?7?
????????}
?8?
};
?9?
class?Derived:public?Base
10?
{
public:
11?
????????virtual?void?Accept(boost::any?anyData)
12?
????????{
13?
????????????????
14?
????????}
15?
};
這樣的Accept函數能夠接受任意類型的數據,并且是virtual函數
//==================
俺是沒這種需求,不過看到了這個,覺得好玩。
Q: c++中為什么沒有提供virtual template function?
A: 因為用不同的 template parameters(模板參數)實例化 function templates(函數模板)導致不同的函數被調用,這?? 是發生在編譯期的, 以 compile-time polymorphism(編譯期多態)著稱。
?? 而virtual member funtion是通過dynamic binding(運行期)來實現不同的函數被調用,是runtime polymorphism.
??
posted on 2006-10-30 23:00
七星重劍 閱讀(1170)
評論(4) 編輯 收藏 引用 所屬分類:
PL--c/c++