将多个模板相互组合

Combining multiple templates in each other

本文关键字:组合      更新时间:2023-10-16

如何在一个函数中组合多种类型,如

template < typename T1 >
template < typename T2 >
T2 average( T1 v1, T1 v2, T1 v3 )
{
T averageValue;
cout<<"after averageValue; v1: "<<typeid(v1).name()
<<" v2: "<<typeid(v2).name()
<<" v3: "<<typeid(v3).name()
<<" averageValue: "<<typeid(averageValue).name();
averageValue =(v1+v2+v3)/.3;
cout<<"nAfter averageValue =(v1+v2+v3)/3; averageValue: "<<typeid(averageValue).name();
return averageValue;
};

我知道代码不会编译,但我想知道是否有任何方法可以做类似的事情

在C++17中,您可以将带有fold表达式的变元模板与sizeof...运算符一起使用:

template<typename... Args>
auto average(Args&&...args)
{
return (args + ...) / double(sizeof...(args));
}

您可以使用多个模板参数

template< typename T1, typename T2>
T2 average(T1 v1, T1 v2, T1 v3){
// stuff
}

只需确保将averageValue声明为T2即可。当然,只有在定义了(v1+v2+v3)/3并且可以转换为T2的情况下,这才会起作用。