Определение количества заданных шаблонных параметров
От: Юрий Жмеренецкий ICQ 380412032
Дата: 22.10.05 02:44
Оценка: 28 (2)
Имеется шаблон с параметрами по умолчанию, например:

struct na;

template<
     class t0=na
    ,class t1=na
    ,class t2=na
    ,class t3=na
    ,class t4=na 
>
struct holder 
{
    {enum real_arg_count = ??? }; // как определить количество реально заданных параметров ?
};


Как вариант, что-то вроде meta_if на каждый параметр.
Громоздко и трудно модифицировать.

В связи с этим родился такой вариант:

template<class t=void> struct inc {     
    enum {value = 1}; 
};

template<class t> struct inc<inc<t> > {
    enum {value = inc<t>::value + 1};
};

template<
     class t0=inc<> 
    ,class t1=inc<t0>
    ,class t2=inc<t1>
    ,class t3=inc<t2>
    ,class t4=inc<t3> 
>
struct A 
{
    enum {real_arg_count= 6-inc<t4>::value};  // 6=1+кол-во параметров(5), t4 - последний параметр
};

...

std::cout << A<int, char, float, double, long>::real_arg_count << std::endl; // 5
std::cout << A<int, char, float>::real_arg_count << std::endl; // 3
std::cout << A<>::real_arg_count << std::endl; // 0


Из минусов — поменялся тип параметра.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.