您好我正在练习模板和类型演绎,并希望尝试使用嵌套模板参数制作一个简单的函数模板,以打印出任何stl容器的内容:
template <template<T, ALLOC> CONT>
void Print(const CONT<T, ALLOC> &c) {
for (const T &elem : c) std::cout << elem << " ";
std::cout << std::endl;
}
我的测试用例:
int main() {
std::list<int> intlist{ 1, 2, 3, 4, 5 };
std::vector<float> floatvec{ 0.2f, 0.5f };
Print(intlist);
Print(floatvec);
}
但是我收到编译器错误,因此无法推断出T和ALLOC的类型。有没有办法让我编写这个函数而不必明确说明模板参数的类型?
请注意,我的对象是能够推断存储在传入的stl容器中的类型。因此,如果在T中传递一个int的向量,则推断为Int。
答案 0 :(得分:3)
在您的情况下,您可以简单地执行
template <typename CONT>
void Print(const CONT& c) {
for (const auto& elem : c) std::cout << elem << " ";
std::cout << std::endl;
}
如果要将Print
函数限制为包含2个模板参数的模板类,则语法为:
template <template<typename , typename> class CONT, typename T, typename ALLOC>
void Print(const CONT<T, ALLOC> &c) {
for (const T &elem : c) std::cout << elem << " ";
std::cout << std::endl;
}