Variadic shablon parametrlar to'plamini ajratib oling va uni tip belgilari meta-funktsiyasida boshqa variadik shablonda ishlating?

Men har qanday variadik sinf shablonini boshqa sinfning asosi ekanligini aniqlamoqchiman. Odatda men std::is_base_of dan foydalanardim, lekin mening foydalanish holatim mos emas deb o'ylayman va buni hal qilish uchun std yoki boost-da allaqachon biror narsa bor-yo'qligiga ishonchim komil emas. Men variadic asosiy sinf shablonining parametrlar to'plami boshqa variadik sinf shablonidan kelishini xohlayman. Mana, men nima qilishni xohlayotganimni tushuntiradigan ba'zi bir misol kodlari:

Foydalanish:

is_variadic_base_of<
   VarClassTemplA
   , ClassDerivedFromA
   , VarClassTemplB //Has param pack I want to use with ClassA
>::value;

Ichaklar:

//test for variadic base of non-variadic
template <template<typename...> class A, typename B, typename... ArgsC>
struct is_variadic_base_of
: std::is_base_of<A<ArgsC...>, B>
{};

Bu mumkinmi?


person Brett Rossier    schedule 20.05.2011    source manba


Javoblar (2)


template <template<typename...> class A, typename B, typename ArgsC>
struct is_variadic_base_of;

template <template<typename...> class A, typename B, 
          template<typename...> class C, typename ...ArgsC>
struct is_variadic_base_of<A, B, C<ArgsC...>> 
: std::is_base_of<A<ArgsC...>, B>
{};

Umid qilamanki, bu yordam beradi!

person Johannes Schaub - litb    schedule 20.05.2011
comment
Bu hech narsani o'zgartirishiga ishonchim komil emas, lekin men VarTemplClassB<int, int, string> ga kichik tahrir qildim, endi bu faqat VarTemplClassB. - person Brett Rossier; 21.05.2011
comment
@Johannes: Boo, bir necha soniya! :( - person Xeo; 21.05.2011
comment
Lol, men qancha almashtirishni sinab ko'rganimni bilmayman va bunga erisha olmadim. Mukammal ishlaydi. Rahmat! - person Brett Rossier; 21.05.2011
comment
@pheedbaq: Bir muncha vaqt o'tgach, siz qisman mutaxassisliklar taklif qiladigan modelga kirasiz. :) - person Xeo; 21.05.2011
comment
@Xeo ohh, bu juda qisqa vaqt farqi edi! - person Johannes Schaub - litb; 21.05.2011
comment
@litb & Xeo: Sizlardan birida bu post uchun yaxshiroq nom bormi? Men tez-tez savolimni ta'riflash men uchun juda qiyin bo'lganligi sababli, shunga o'xshash savollarning qanchasi borligiga hayron bo'laman. - person Brett Rossier; 21.05.2011

Siz deyarli keldingiz, lekin uni qisman mutaxassislik bilan sinab ko'ring:

template<
    template<class...> class A, class B, class C
>
struct is_variadic_base_of;

// partial spec
template<
    template<class...> class A, class B,
    template<class...> class C, class... ArgsC
>
struct is_variadic_base_of< A,B,C<ArgsC...> >
  : std::is_base_of< A<ArgsC...>,B >
{};
person Xeo    schedule 20.05.2011
comment
Xo'sh, men bir nechta narsalarni sinab ko'rdim. Hali ham ixtisosliklar bo'yicha narsalarni qanday qilib maydalashni to'liq bilmayman, lekin men bunga erishyapman. SO peeps katta yordam bo'ldi! - person Brett Rossier; 21.05.2011
comment
@pheedbaq: Jang! ;) Lekin tan olishim kerakki, bu qisman ixtisoslashgan narsa menga juda yoqadigan TMPning bir qismidir, ayniqsa unga mos keladigan naqsh. - person Xeo; 21.05.2011
comment
Bizda ham shu. Men har qanday xunuk o'rdak sintaksisiga qaramay, TMP qila oladigan narsalardan doimo hayratdaman. Faqat bu narsalarni birinchi navbatda amalga oshirish mumkinligi, tilning hamma narsasi bilan bir qatorda ... juda ajoyib. - person Brett Rossier; 21.05.2011