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
cevap
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>
{
};
Diğer derleyicilerin tamamlanmamış tipte typedef'e başvurmasına nasıl izin verilir? –
@AlexanderBily Diğer derleyiciler? – Barry
Ah üzgünüm yorumlardan birini yanlış okumuş –
clang, burada MSVC ile gcc hemfikir de. Ancak, nedenini anlayamıyorum. – SergeyA
MSVC'de herhangi bir iş var mı? –
Bu sorunun daha önce sorulmuş olduğunu biliyorum, ama nedense bir dupe bulamıyorum ... – Barry