【发布时间】:2021-12-17 00:24:51
【问题描述】:
我想强制参数包中的所有类型都声明一个嵌套类型别名 (T),并将所有类型的 T 扩展为 tuple。这样的事情可能吗?当我尝试下面的幼稚方式时,它不会将Types::T 识别为一种类型。
class A { using T = int; };
class B { using T = double; };
template<class ... Types>
class C {
using tuple_of_types_t = std::tuple<Types...>; // of course this works
using tuple_of_nested_types_t = std::tuple<((Types::T),...)>; // how do I achieve this?
};
【问题讨论】:
-
使用
typename:std::tuple<typename Types::T...>;。 when to use typename, template keywords -
请注意,
A和B中的T都是私有的,这会影响类型检查 -
type是比T更常规的 typedef 命名。
标签: c++ templates c++17 variadic-templates parameter-pack