gpt4 book ai didi

c++ - 尝试使用可变参数模板定义类型

转载 作者:行者123 更新时间:2023-11-30 02:43:18 24 4
gpt4 key购买 nike

我是可变参数模板的新手,所以请多多包涵。

我正在努力将我的维度分析库带入 21 世纪,直至 C++11。我希望能够定义元组类型,而不是实例。这基本上就是我想说明的:

using velocity_dimension = make_dimension<1, 0, -1, 0, 0, 0, 0>;

结果应该等同于:

using velocity_dimension = std::tuple<std::ratio<1>, std::ratio<0>, std::ratio<-1>, std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<0>>;

我正在努力思考可变参数模板以及如何获得我想要的界面。我一直在尝试尝试:

template<typename T, typename ...Args>
using make_list = std::tuple < std::ratio<T>, make_list<Args>...>> ;

我认为这只是说明我不明白这些东西应该如何工作。

最佳答案

你想要的东西是可变数量的整数,而不是类型,所以不应该有 typename在模板参数列表中。

std::ratio<T> 类似模板参数应该是一个整数,而不是一个类型。

你的递归 make_list不会工作,因为你不能专门化别名模板,所以没有办法终止递归。您可以使用类模板执行类似的操作并提供部分特化来终止递归,但没有必要这样做。

我想你只是想:

template<int... I>
using make_dimension = std::tuple<std::ratio<I>...>;

这需要一个整数参数包,然后将其扩展为 std::ratio<> 的列表特化并将很多包装在一个元组中。

这里的包扩展模式是std::ratio<I>...这意味着每个元素 i在参数包中 I将替换为 std::ratio<i> , 所以如果包是 1, 2, 3那么扩展就是std::ratio<1>, std::ratio<2>, std::ratio<3>

关于c++ - 尝试使用可变参数模板定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26267637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com