我有一个这样的课程:
class Foo
{
...
template<template<typename...> class container>
void fillContainer(container<int> &out)
{
//add some numbers to the container
}
...
}
我这样做是为了能够处理不同的stl容器。现在我想为std :: vector创建一个特殊化来保留Memory(我知道要插入的数量)。我看过this和this帖子,所以我做了以下内容:
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
?
答案 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
}
...
};
(有一些不起眼的案例会产生影响,例如,如果有人想要获取功能模板版本的地址,但没有什么需要它专门而不是更简单的重载方法。)