如何替换给定类型的模板参数?

Mus*_*ful 0 c++ templates template-meta-programming c++14

考虑到一个名为模板参数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>?
}
Run Code Online (Sandbox Code Playgroud)

Tyk*_*ker 7

你可以这样做模板特一的模板,模板参数

template<typename, typename>
struct meta {};

template<typename A, template<typename> typename C, typename B>
struct meta<A, C<B>> {
    using type = C<A>;
};
Run Code Online (Sandbox Code Playgroud)

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...>;
};
Run Code Online (Sandbox Code Playgroud)