C++ 有没有办法在嵌套模板中指定内部模板的类型?我想做的是
template<template <std::string> class StringContainer>
void function(const StringContainer& cont);
换句话说,我想要一个接受所有类型字符串容器的函数——vector
、deque
、list
、等等
基本上,我有四个问题:
- 有可能吗?
- 如果是这样,定义应该是什么样的(上面没有编译,但我没想到会)?
- 即使可能,是否有办法使其与标准容器一起使用,这些容器具有多个模板参数,甚至可能是特定于实现的?
- 如果不是容器,我至少可以期望迭代器只有一个模板参数吗?
谢谢!
最佳答案
#include <deque>
#include <list>
#include <iostream>
#include <vector>
// Removed:
// template < template<typename, typename ...> class Container,
// typename T, typename ...Types>
// void function(const Container<T, Types...>&);
template < template<typename ...> class Container, typename ...Types>
void function(const Container<std::string, Types...>& container) {
for(const std::string& s: container) {
std::cout << s << " ";
}
std::cout << std::endl;
}
int main () {
std::deque<std::string> d{ "Hello", "Deque" };
function(d);
std::list<std::string> l{ "Hello", "List" };
function(l);
std::vector<std::string> v{ "Hello", "Vector" };
function(v);
return 0;
}
关于C++限制模板模板中的内部类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18720652/