我遵循C++模板完整的指南,并试图从打字员那里获得第一个元素。
以下是汇编:
#include <bits/stdc++.h>
using namespace std;
template <typename... Elements>
class Typelist;
using SignedIntegralTypes =
Typelist<signed char, short, int, long, long long>;
template <typename List>
class HeadT;
template <typename Head, typename... Tail>
class HeadT<Typelist<Head, Tail...>> {
public:
using Type = Head;
};
template <typename List>
using Head = typename HeadT<Typelist<List>>::Type;
int main() {
static_assert(is_same<Head<SignedIntegralTypes>, SignedIntegralTypes>::value, "");
}Head<SignedIntegralTypes>产生SignedIntegralTypes。我希望它能生产出signed char。为什么会发生这种情况?我该怎么解决呢?
发布于 2022-08-21 18:16:00
让我们解构所有的模板,一步一步。
Head<SignedIntegralTypes>好了,现在让我们来定义一下Head是什么:
template <typename List>
using Head = typename HeadT<Typelist<List>>::Type;因为SignedIntegralTypes是模板参数,所以List就是在这里。这就变成了:
typename HeadT<Typelist<SignedIntegralTypes>>::Type既然SignedIntegralTypes本身就是一个:
using SignedIntegralTypes =
Typelist<signed char, short, int, long, long long>;全班学生如下:
typename HeadT<Typelist<Typelist<signed char, short, int, long, long long>>>::Type如果您计算出专门化的结果,那么Typelist中的第一个类型是
Typelist<signed char, short, int, long, long long>这就是Type的别名。A.k.a.一个SignedIntegralTypes。
为了得到预期的结果,只需修复Head别名,就可以修复这个问题:
template <typename List>
using Head = typename HeadT<List>::Type;https://stackoverflow.com/questions/73437029
复制相似问题