LINUX.ORG.RU

как работать с template<int ... args> void func()?

 


0

1

Сабж. Единственное что у меня вышло, это

int p[sizeof ... (args)] = {args ...};
но это грустно и неинтересно.

А вот рекурсивный проход

#include<stdio.h>

void g(){}

template <int x, int ... args> void g(){
	printf("%i\n", x);
	g<args...>();
}

int main(){
	g<1,2,3>();
	return 0;
}
$ g++ -Wall -std=c++0x test.cpp
test.cpp: In function ‘void g() [with int x = 3, int ...args = ]’:
test.cpp:7:   instantiated from ‘void g() [with int x = 2, int ...args = 3]’
test.cpp:7:   instantiated from ‘void g() [with int x = 1, int ...args = 2, 3]’
test.cpp:11:   instantiated from here
test.cpp:7: error: no matching function for call to ‘g()’
ЧЯНТД?

★★★★★

терминатор не правильный:

template <typename... args> void g() {}
 
template <int x, int... args> void g() {
    printf("%i\n", x);
    g<args...>();
}
x0r ★★★★★
()
Ответ на: комментарий от x0r

ВОт ведь, явно не обошлось без сумрачного немецкого гения... Спасибо!;-)

AIv ★★★★★
() автор топика
Ответ на: комментарий от x0r

Интересно, а можно сделать так, что бы типы аргументов были разные? Например при вызове:

g <1, 1.2, 1>();
результат был приблизительно такой:
int: 1, double: 1.2, int: 1

nanoolinux ★★★★
()
Ответ на: комментарий от AIv

да, да ;) , а когда char и int делаешь, компилятор в растерянности не знает чего с этим кодом делать.

anonymous
()
Ответ на: комментарий от anonymous

поправочка. касается случая

g<1, 'b', 3>();

anonymous
()
Ответ на: комментарий от AIv

не, я не это имел ввиду. я имел ввиду для char одну функцию вызывать, для int другую. или у меня не получилось.

anonymous
()
Ответ на: комментарий от nanoolinux

Разные аргументы можно, а вот float/double в качестве шаблонных параметров выступать никак не могут.

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