专门用于stl容器的成员函数

时间:2015-07-23 09:05:11

标签: c++ templates stl template-specialization

我有一个这样的课程:

class Foo
{

    ...
    template<template<typename...> class container>
    void fillContainer(container<int> &out)
    {
        //add some numbers to the container
    }
    ...

}

我这样做是为了能够处理不同的stl容器。现在我想为std :: vector创建一个特殊化来保留Memory(我知道要插入的数量)。我看过thisthis帖子,所以我做了以下内容:

class Foo
{
    //Same Thing as above
}

template<>
void Foo::fillContainer(std::vector<int> &out)
{
    //add some numbers to the container
}

现在我收到错误:error: no member function 'fillContainer' declared in 'Foo'。我猜问题是template<template<typename...> class container>

是否有可能将此功能专门用于std::vector

1 个答案:

答案 0 :(得分:5)

没有理由尝试专门化它,只需添加一个重载:

class Foo
{
    ...
    template<template<typename...> class container>
    void fillContainer(container<int>& out)
    {
        //add some numbers to the container
    }

    void fillContainer(std::vector<int>& out)
    {
        //add some numbers to the container
    }

    ...
};

(有一些不起眼的案例会产生影响,例如,如果有人想要获取功能模板版本的地址,但没有什么需要它专门而不是更简单的重载方法。)