专用于stl容器的成员函数

Specialize member function for stl container

本文关键字:成员 函数 用于 stl 专用      更新时间:2023-10-16

我有一个这样的类:

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

我这样做是为了能够处理不同的stl容器。现在我想为std::vector创建一个专门化来保留内存(我知道要插入的数字的数量)。我读了这篇文章和这篇文章,所以我做了下面的事情:

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专门化此函数

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

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
    }
    ...
};

(在一些模糊的情况下,它会产生影响,例如,如果有人想取函数模板版本的地址,但不需要对其进行专门化,而不是采用更简单的重载方法。)