首页 > 解决方案 > 如何使用内部模板构建模板化函数?

问题描述

我正在尝试创建一个模板化函数,该函数接受任何类型的对象,这些对象本身也是模板化的。一个例子是:

ObjA<int, string> o;
ObjB<float, int> o2;

我想制作一个接受任何这些类型对象的函数,但不确定如何构造模板。这是我的错误尝试:

template<typename T, typename U, typename V>
    void Add(std::shared_ptr<V<T, U>> inst) {
    
    }

标签: c++templates

解决方案


您需要V转换为模板模板参数

template<typename T, typename U, template<typename, typename> typename V>
void Add(std::shared_ptr<V<T, U>> inst) {

}

请注意,这仅限V于具有两个模板参数。您制作“模板化函数,该函数接受本身也是模板化的任何类型的对象”的目标并未指定该限制;要允许V拥有任意数量的模板参数,您可以这样做:

template<template<typename...> typename V, typename... Ts>
void Add(std::shared_ptr<V<Ts...>> inst) {

}

推荐阅读