嵌套模板参数和类型推导

时间:2015-06-14 11:56:08

标签: c++ templates type-deduction

您好我正在练习模板和类型演绎,并希望尝试使用嵌套模板参数制作一个简单的函数模板,以打印出任何stl容器的内容:

template <template<T, ALLOC> CONT> 
void Print(const CONT<T, ALLOC> &c) {

    for (const T &elem : c) std::cout << elem << " ";
    std::cout << std::endl;
}

我的测试用例:

int main() {
    std::list<int> intlist{ 1, 2, 3, 4, 5 };
    std::vector<float> floatvec{ 0.2f, 0.5f };

    Print(intlist);
    Print(floatvec);
}

但是我收到编译器错误,因此无法推断出T和ALLOC的类型。有没有办法让我编写这个函数而不必明确说明模板参数的类型?

请注意,我的对象是能够推断存储在传入的stl容器中的类型。因此,如果在T中传递一个int的向量,则推断为Int。

1 个答案:

答案 0 :(得分:3)

在您的情况下,您可以简单地执行

template <typename CONT> 
void Print(const CONT& c) {
    for (const auto& elem : c) std::cout << elem << " ";
    std::cout << std::endl;
}

如果要将Print函数限制为包含2个模板参数的模板类,则语法为:

template <template<typename , typename> class CONT, typename T, typename ALLOC> 
void Print(const CONT<T, ALLOC> &c) {
    for (const T &elem : c) std::cout << elem << " ";
    std::cout << std::endl;
}