2011-12-25 148 views
-1

我想做些事情是這樣的:指定類方法模板參數 - 可選(默認參數)

template <class T,class t_function = t::default_function> 
class foo 
{ 
    public: 
    static void bar(T t) 
    { 
     t.t_function(); 
    } 
}; 

class example1 
{ 
    public: 
     void default_function() 
     { 
      std::cout<<"test"<<std::endl; 
     } 
}; 

class example2 
{ 
    public: 
     void someotherfunction() 
     { 
     std::cout<<"test2"<<std::endl; 
     } 
}; 

//how to use it 

foo<example1>::bar(example1()); //should work, since example1 has the default function 

foo<example2,example2::someotherfunction>::bar(example2()); //should work too 

在的話:我想有該功能的用戶能夠提供替代方法來執行,而不是默認的方法。

我可以在C++中實現嗎?如果是這樣,怎麼辦?

+0

已經是-1,沒有任何解釋。悲傷的臉 :( – TravisG 2011-12-25 21:24:07

回答

1

也許是這樣的:

template <class T, void(T::*TFun)() = &T::default_function> 
struct Foo 
{ 
    static void bar(T t) 
    { 
     (t.*TFun)(); 
    } 
}; 

用法:

struct Zoo { void default_function() { } }; 
struct Zar { void bla() { } }; 

int main() 
{ 
    Zoo z1; 
    Zar z2; 
    Foo<Zoo>::bar(z1); 
    Foo<Zar, &Zar::bla>::bar(z2); 
}