尝试使用可变模板定义类型
Trying to define types with variadic templates
我对可变模板是全新的,所以请耐心等待。
我正在努力将我的维度分析库带入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>
相关文章:
- 使用QJsEngine在Qt中注册自定义类型
- 在UE4中使用未定义类型'UTextBlock'
- 修改"std::set"中用户定义类型的值
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 如何使自定义类型在unordered_map中用作键
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- 为什么转换函数声明不需要至少一个定义类型说明符
- 标准::原子中的自定义类型
- 如何使用自定义类型声明Arduino数组?
- 如何在 Cython 中定义返回 cpp 定义类型的函数?
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 在自定义类型图中重用 SWIG 映射
- 扩展自定义类型的spdlog
- vim使用户定义类型的COLOR与C++中的基本类型相同
- 重载自定义类型的 std::to_string 和 std::to_chars?
- 具有未声明/未定义类型的 typedef 结构
- 函数重载:内置类型与用户定义类型