小编snO*_*3ad的帖子

如何使 `std::conditional_t` 与递归一起工作?

我的用例如下:

template <typename T>
struct peel {
    using type = std::conditional_t<std::is_pointer_v<T>, typename peel<std::remove_pointer_t<T>>::type, T>;
};

template <typename T>
using peel_t = typename peel<T>::type;
Run Code Online (Sandbox Code Playgroud)

但是,如果您调用此方法,peel_t<int *>则会返回错误:

错误:“peel<int>”中没有名为“type”的类型

问题似乎是缺乏终止条件,因为peel没有专门处理没有更多指针需要删除的情况。但我脑子里std::conditional_t应该已经在处理这个问题了。

我的问题是,有没有一种方法可以std::conditional_t在需要递归的场景中工作(比如这个)?我特别希望通过以下检查:

static_assert(std::is_same_v<peel_t<int **>, int>);
Run Code Online (Sandbox Code Playgroud)

c++ type-traits template-meta-programming c++-templates

2
推荐指数
1
解决办法
116
查看次数