Приведенный ниже код должен показать, что я имею в виду, можно ли использовать шаблонную функцию typedef в аргументах ...
#include <vector>
struct vec2
{
float x, y;
};
struct dvec2
{
double x, y;
};
template <typename T>
void function(std::vector<T>& list, decltype(T::x) scalarVal, decltype(T::x) scalarVal2)
{
typedef decltype(T::x) scalarType;
scalarType a; // a is now a double or float depending on template argument
}
int main()
{
std::vector<vec2> vecOfVec2;
std::vector<dvec2> vecOfDvec2;
function(vecOfVec2, 0.f, 1.f);
function(vecOfDvec2, 0.0, 1.0);
}
Итак, вы можете видеть, что в функции, которую я сделал, typedef из:
typedef decltype(T::x) scalarType;
А затем используйте scalarType
для обозначения либо float
, либо double
.Было бы полезно, если бы я мог перечислить аргументы функции функции следующим образом:
void function(std::vector<T>& list, scalarType scalarVal, scalarType scalarVal2)
, но, видя, что typedef не создается, пока внутри функции это не будет работать.Если это невозможно, допустимо ли это сделать:
(decltype(T::x) scalarVal, ...)
для аргументов каждый раз, как я это показал в примере?