hiçbir şans ile bu googling çalıştı iç içe ++ yüzden buraya çalışıyorum.c yinelemeli türleri ve adı enjeksiyonu
bir elemanı struct foo
tanımlayan her biri sınıfları, bir çift var. Bu üye türü foo
kendisi dolayısıyla elemanı tipi foo
kendisi elde edilmesi, eski sınıflarının birinden devralabilir.
(aşağıya bakın) şablonu metaprogramming kullanılarak iç içe foo
türlerini erişmek istiyorum, ama üst foo
tür adı alt foo
türü içine enjekte alır gibi C++ adı enjeksiyon, sorunları tanıtır ve istediğim zaman Üstteki çözüme kavuşturulacağını Aşağıya erişmek için A::foo::foo
'u kullanın. Bilginize, ben işlev türevleri uygulayarak ediyorum
#include <type_traits>
struct A;
struct B;
struct A {
struct foo;
};
struct B {
struct foo;
};
struct A::foo : B { };
struct B::foo : A { };
// handy c++11 shorthand
template<class T>
using foo = typename T::foo;
static_assert(std::is_same< foo< foo<A> >, foo<B> >::value,
"this should not fail (but it does)");
static_assert(std::is_same< foo< foo<A> >, foo<A> >::value,
"this should fail (but it does not)");
, foo
türevi aşağıdaki gibidir: Burada
TLDR: foo<A>
, foo<B>
olmak üzere foo<foo<A>>
'u nasıl alabilirim?
Teşekkürler!
Aklımda benzer bir şey vardı, ama tür bir sürü neyse ... Her türetilmiş türü için Teşekkür üye tabanı türünü tanımlayan önlemek umuyordum! bazlar listesi sabit ise, bunları otomatik olarak işleyebilir: Dediğim gibi – max
@MaximeTournier. Birden fazla kalıtım karşısında bu oldukça garipleşiyor. – pmr
Anladım ama üsleri liste ne yazık ki sabit değildir: -/ – max