#include <iostream>
#include <vector>
using namespace std;
/*задаём функцию,принимающие как шаблонные параметы число аргументов,
текущий тип и массив оставшихся
*/
template <int N,typename T,typename ...Arg>
struct _foo{
static void _foreach(std::vector<uint> &v){
//записываем в массив размер текущего типа
v.push_back(sizeof(T));
_foo<N-1,Arg...>::_foreach(v);//вызываем функцию снова
}
};
//ограничение рекурсии
template <typename T,typename ...Arg>
struct _foo<1,T,Arg...>{
static void _foreach(std::vector<uint> &v){
v.push_back(sizeof(T));
}
};
template <typename ...Arg>
void foo(std::vector<uint> &v){
_foo<sizeof...(Arg),Arg...>::_foreach(v);
};
int main() {
std::vector<uint> size_types;
foo<int,float,double,char>(size_types);
std::cout<<size_types.size()<<std::endl;
return 0;
}
BEGIN
SET @AUTHOR=AUTHOR;
SET @CHAT_NAME=CHAT_NAME;
SET @ggg=CONCAT('CREATE TEMPORARY TABLE collum SELECT ORDINAL_POSITION, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = "',@CHAT_NAME,'"');
PREPARE fff FROM @ggg;
EXECUTE fff;
DEALLOCATE PREPARE fff;
SET @ggg=CONCAT('SELECT id ,view FROM ',@CHAT_NAME,' WHERE view!=(SELECT @id:= MAX(ORDINAL_POSITION) FROM collum) AND flg!=3 AND POINT(',@AUTHOR,')=view');
PREPARE fff FROM @ggg;
EXECUTE fff;
DEALLOCATE PREPARE fff;
SELECT @ggg;
END