那么,
我有以下模板,可以将两个单位相乘,例如速度和时间。
//! The product of the TWO units
template<template<typename> typename QuantityLhs, template<typename> typename QuantityRhs>
struct Multiply
{
template<typename T>
using type = units::unit<typename product_t<QuantityLhs<UNIT_LIB_DEFAULT_TYPE>, QuantityRhs<UNIT_LIB_DEFAULT_TYPE>>::conversion_factor, T>;
};
例如,可以通过以下方式调用:
using AccuType = Multiply<Velocity, Time>::type<float>;
上面的定义只接受两个模板参数,但我想要任意数量的模板参数。
所以我希望能够写出类似的东西
using AccuType = Multiply<Velocity, Time, Temperature, Density>::type<float>;
所以我的想法是创建一个可变参数模板
//! The product of the ANY number of units
template<typename... Quantities>
struct MultiplyMany
{
// Code
};
不幸的是,我不知道如何让它发挥作用。我有这样的想法,
MultiplyMany
会以某种方式使用 for 循环或其他东西来根据需要多次调用基本 Multiply
结构(迭代模板参数)。
这可能吗?
您可以将
Quantity
转为可变参数模板
template<template<typename> typename... Quantities>
struct Multiply
{
template<typename T>
using type = units::unit<
typename product_t<Quantities<UNIT_LIB_DEFAULT_TYPE>...>::conversion_factor, T>;
};
using AccuType = Multiply<Velocity, Time, Temperature, Density>::type<float>;