2016-03-28 22 views
4

temel sınıftan türetilmiş sınıfta typedef bakın kod geçerli C++ veya MSVS doğru mu?CRTP kod şu var

+0

clang, burada MSVC ile gcc hemfikir de. Ancak, nedenini anlayamıyorum. – SergeyA

+0

MSVC'de herhangi bir iş var mı? –

+0

Bu sorunun daha önce sorulmuş olduğunu biliyorum, ama nedense bir dupe bulamıyorum ... – Barry

cevap

3

sorun tam tip olmak için bu noktada

template <typename T> 
class A 
{ 
    typedef typename T::Type MyType; 
        ^^^ 
}; 

T ihtiyacı var. Ama senin durumunda, zaman A<T> burada başlatılır:

template <typename T> 
class B : public A<B<T>> 
       ^^^^^^^ 

B<T> henüz tam bir türü değil! Yani bu maalesef işe yaramaz.

basit bir çözüm sadece ayrı ayrı Type yılında geçmektir:

template <typename T, typename Type> 
class A 
{ 
    typedef Type MyType; 
};  

template <typename T> 
class B : public A<B<T>, T> 
{ 

}; 
+0

Diğer derleyicilerin tamamlanmamış tipte typedef'e başvurmasına nasıl izin verilir? –

+0

@AlexanderBily Diğer derleyiciler? – Barry

+0

Ah üzgünüm yorumlardan birini yanlış okumuş –