提问人:Guillaume Racicot 提问时间:8/1/2023 最后编辑:Guillaume Racicot 更新时间:8/1/2023 访问量:66
如何在任何嵌套级别替换模板中的类型?
How can I replace a type in a template at any level of nesting?
问:
我有一个名为 .我想用模板元函数替换该类型。我希望模板元函数非常复杂,所以让我们称它为。the_bad
the_good
the_ugly
我的问题是可以嵌套在其他模板中,并且我想保持其他模板和参数不变。下面是我的意思的一个例子,其中不完整的实现:the_bad
the_ugly
struct the_good {};
struct the_bad {};
template<typename T>
struct the_ugly_impl {
using type = T;
};
template<>
struct the_ugly_impl<the_bad> {
using type = the_good;
};
template<typename T>
using the_ugly = typename the_ugly_impl<T>::type;
// passes, yay!
static_assert(std::same_as<the_good, the_ugly<the_bad>>);
// doesn't pass
static_assert(std::same_as<std::vector<the_good>, the_ugly<std::vector<the_bad>>>);
// doesn't pass
static_assert(std::same_as<std::list<std::vector<the_good>>, the_ugly<std::list<std::vector<the_bad>>>>);
我该如何修复,以便它替换为任何嵌套级别,同时保持所有其他模板和其他模板参数保持不变?the_ugly
the_bad
the_good
答:
5赞
Barry
8/1/2023
#1
您只需要处理模板案例,并递归调用自身:
template<typename T>
struct the_ugly_impl {
using type = T;
};
template<typename T>
using the_ugly = typename the_ugly_impl<T>::type;
template<>
struct the_ugly_impl<the_bad> {
using type = the_good;
};
template <template <typename...> class L, typename... Ts>
struct the_ugly_impl<L<Ts...>> {
using type = L<the_ugly<Ts>...>;
};
评论
2赞
StoryTeller - Unslander Monica
8/1/2023
非类型模板参数已加入聊天:(无论如何都要升级
2赞
Guillaume Racicot
8/1/2023
@StoryTeller-诽谤莫妮卡:是的,我有点明白你的意思了。我想那会的。我可以处理一些常见的情况,然后收工
评论