使用boost::any實(shí)現(xiàn)virtual template成員函數(shù)
如你所知,C++中沒有提供virtual template function。然而有時(shí)候你的確會(huì)有這種需要,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函數(shù)能夠接受任意類型的數(shù)據(jù),并且是virtual函數(shù)
//==================
俺是沒這種需求,不過看到了這個(gè),覺得好玩。
Q: c++中為什么沒有提供virtual template function?
A: 因?yàn)橛貌煌?template parameters(模板參數(shù))實(shí)例化 function templates(函數(shù)模板)導(dǎo)致不同的函數(shù)被調(diào)用,這?? 是發(fā)生在編譯期的, 以 compile-time polymorphism(編譯期多態(tài))著稱。
?? 而virtual member funtion是通過dynamic binding(運(yùn)行期)來實(shí)現(xiàn)不同的函數(shù)被調(diào)用,是runtime polymorphism.
??
posted on 2006-10-30 23:00
七星重劍 閱讀(1187)
評(píng)論(4) 編輯 收藏 引用 所屬分類:
PL--c/c++