LINUX.ORG.RU

Объявление С++ шаблонов вида template<ret_type (type1,type2,...)>


0

0

При использовании boost позволяется декларировать типы вот таким вот удивительным способом:

boost::function<void (int,double)> f;

Никак не могу взять в толк, как такое достигается? В сорцах boost по этой тему что-либо довольно трудно понять - там довольно сложный код. Где можно почитать про этот способ записи?

anonymous

ну это шаблон. в качестве аргумента шаблона используется type-id, описанный в главе dcl.name стандарта.

int (float, double)

это тип идентификатора int f( float, double)

но как потом дуст из этого типа извлекает тип результатов и аргументы, мне сложно сказать.

dilmah ★★★★★
()

Частичная специализация, вот тебе предельно простой пример:

template<class>
struct fun_sig;

template<class R>
struct fun_sig<R(void)> 
{ 
	typedef R return_type; 
};

template<class R, class T1>
struct fun_sig<R(T1)> 
{ 
	typedef R return_type; 
	typedef T1 arg1_type;
};

template<class R, class T1, class T2>
struct fun_sig<R(T1,T2)> 
{ 
	typedef R return_type; 
	typedef T1 arg1_type;
	typedef T2 arg2_type;
};

int main()
{
	fun_sig<float(void)> f0;
	fun_sig<float(int)> f1;
	fun_sig<float(int,int)> f2;
}

aton
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.