有没有更好的方法来编写此模板? 我在谷歌C++测试框架上阅读了代码> GITHUB()

有没有更好的方法来编写此模板? 我在谷歌C++测试框架上阅读了代码> GITHUB(),c++,templates,C++,Templates,我发现作者写了以下代码 template <typename T1, typename T2, typename T3> internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) { return internal::ValueArray3<T1, T2, T3>(v1, v2, v3); } template <typename T1, typename T2, typename T3

我发现作者写了以下代码

template <typename T1, typename T2, typename T3>
internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
return internal::ValueArray3<T1, T2, T3>(v1, v2, v3);
}

template <typename T1, typename T2, typename T3, typename T4>
internal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4);
}
..... 
....
...
..
.
template <typename T1, typename T2, typename T3, typename T4, typename T5,
typename T6, typename T7, typename T8, typename T9, typename T10,
typename T11, typename T12, typename T13, typename T14, typename T15,
typename T16, typename T17, typename T18, typename T19, typename T20,
typename T21, typename T22, typename T23, typename T24, typename T25,
typename T26, typename T27, typename T28, typename T29, typename T30,
typename T31, typename T32, typename T33, typename T34, typename T35,
typename T36, typename T37, typename T38, typename T39, typename T40,
typename T41, typename T42, typename T43, typename T44, typename T45,
typename T46, typename T47, typename T48, typename T49, typename T50>
internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4,
T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,
T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,
T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {
return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
  T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
  T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
  T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,
  v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
  v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
  v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
  v48, v49, v50);
 }
模板
内部::值数组3值(T1 v1、T2 v2、T3 v3){
返回内部::ValueArray3(v1、v2、v3);
}
模板
内部::值数组4值(T1 v1、T2 v2、T3 v3、T4 v4){
返回内部::ValueArray4(v1、v2、v3、v4);
}
..... 
....
...
..
.
模板
内部::值数组50个值(T1 v1、T2 v2、T3 v3、T4 v4、,
T5 v5、T6 v6、T7 v7、T8 v8、T9 v9、T10 v10、T11 v11、T12 v12、T13 v13、,
T14V14,T15V15,T16V16,T17V17,T18V18,T19V19,T20V20,T21V21,
T22V22、T23V23、T24V24、T25V25、T26V26、T27V27、T28V28、T29V29、,
T30 v30、T31 v31、T32 v32、T33 v33、T34 v34、T35 v35、T36 v36、T37 v37、,
T38 v38、T39 v39、T40 v40、T41 v41、T42 v42、T43 v43、T44 v44、T45 v45、,
T46 v46、T47 v47、T48 v48、T49 v49、T50 v50){
返回内部::ValueArray50(v1、v2、v3、v4、,
v5、v6、v7、v8、v9、v10、v11、v12、v13、v14、v15、v16、v17、v18、v19、,
v20、v21、v22、v23、v24、v25、v26、v27、v28、v29、v30、v31、v32、v33、,
v34、v35、v36、v37、v38、v39、v40、v41、v42、v43、v44、v45、v46、v47、,
v48、v49、v50);
}
作者花费数百行代码重载函数,以便将参数列表从2取到50

我的问题是“有没有更好的写作方法”

多谢各位


—C++ NoOB</P>< P>这在C++ 98/03中变得相当普遍。 从C++11开始,您通常对可变模板执行相同的操作


事实上,至少乍一看,整个
ValueArray
似乎非常接近C++11所称的
tuple

“作者”似乎是一个代码生成器,而不是一个人。阅读文件中的注释:
此文件由命令生成:pump.py gtest-param-test.h.pump请勿手动编辑。您可以使用可变模板来更系统地表达这一点,但代码可能希望C++98用户可以使用。我明白了。感谢您指出它是由代码生成的。