У меня есть векторный класс template <unsigned int L> class Vec
счетчика переменных координат L
.C++ variadic function: использовать количество параметров в качестве аргумента шаблона
Я хотел бы реализовать функцию выбора полей из GLSL, которая позволяет создавать новые векторы, выбрав как vec4 a=vec4(1,2,3,4); vec4 b=a.xyxz; //b is (1,2,1,3).
В моей программе я хотел бы создать что-то вроде этого:
Vec<3> a={7,8,9};
Vec<4> b=a.select(0,2,2,1); //each argument is an index of the coordinate to use.
Vec<5> c=b.select(0,1,2,3,1);
Solution :
template<typename... Args,unsigned int S=sizeof...(Args)> Vec<S> select(Args&&... args){
Vec<S> result;
int indices[S]={args...};
for(int i=0;i<S;i++){
result[i]=this->v[indices[i]]; //v is the float array that stores the values.
}
return result;
}
и некоторые нелепые примеры, чтобы увидеть, если он работает:
Vec<3> a={7,8,9};
Vec<9> b=a.select(0,0,1,1,0,0,1,1,2);
Vec<1> c=a.select(2);
a=[7,8,9]
b=[7,7,8,8,7,7,8,8,9]
c=[9]
Возможный дубликат [этот вопрос] (http://stackoverflow.com/questions/12024304/c11-number-of-variadic-template-function-parameters) – Edward
'template class Vec' remove 'const', он избыточен –