首页 > 解决方案 > 如何替换给定类型的模板参数?

问题描述

鉴于称为模板参数B的类型(在实例化时) ,C<D>我该如何构造?C<A>B

这是我的代码的最小化摘录:

template<typename A>
class foo {
    template<typename B> // B is guaranteed to always be of the form C<D>
    // How to write a function here with return type C<A>?
}

标签: c++templatesc++14template-meta-programming

解决方案


您可以通过模板模板参数模板特化来做到这一点

template<typename, typename>
struct meta {};

template<typename A, template<typename> typename C, typename B>
struct meta<A, C<B>> {
    using type = C<A>;
};

meta<A, C<B>>::type将会C<A>

如果您想在基本情况下处理默认参数

template<typename...>
struct meta {};

template<typename A, template<typename...> typename C, typename B, typename ... Ts>
struct meta<A, C<B, Ts...>> {
    using type = C<A, Ts...>;
};

推荐阅读