2015-05-04 62 views
0

wikipediaCRTP類例如

template <class T> 
struct Base 
{ 
    void interface() 
    { 
     // ... 
     static_cast<T*>(this)->implementation(); 
     // ... 
    } 

    static void static_func() 
    { 
     // ... 
     T::static_sub_func(); 
     // ... 
    } 
}; 

struct Derived : Base<Derived> 
{ 
    void implementation(); 
    static void static_sub_func(); 
}; 

看來我們要只在interface()功能使用implementation()。那麼爲什麼我們不宣佈implementation()private函數?

回答

4

如果您製作implementation()私人,那麼基類將無法訪問它。爲了使它能夠訪問它,你就使基衍生的朋友:

struct Derived : Base<Derived> 
{ 
    static void static_sub_func(); 

    private: 

    friend class Base<Derived>; //make base friend 

    void implementation(); 

}; 

希望有所幫助。