在下面的示例中,我想使用模板函数 f 获取一个 STL 容器(list 或 unordered_set)。我知道 STL 容器将包含整数。
我尝试使用部分模板模板特化,但它不起作用。
我如何实现我想要的?
上面的代码显然不能编译。
#include <list>
#include <unordered_set>
template <typename T, template C<T>>
C<T> f()
{
C<T> d;
d.insert(1);
return d;
}
int main()
{
auto l = f<int, std::list<int>>();
auto s = f<int, std::unordered_set>();
return 0;
}
谢谢。
最佳答案
你至少会遇到问题 std::list
不需要 insert
同理std::unordered_set
做。前者需要职位;后者没有。
除此之外,我可以让它编译和执行(不要忘记你需要实例化模板):
template <typename T, typename C>
C f()
{
C d;
d.insert(1);
return d;
}
template std::unordered_set<int> f<int, std::unordered_set<int>>();
但是您将无法以这种方式使用列表。
这样的事情你能接受吗?如果不是,我认为您需要就您想要的内容进一步澄清您的问题。
关于c++ - 模板中的模板。在模板函数中特化模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38314980/