C++ 部分模板向量专门化
我有一个处理不同容器的通用函数C++ 部分模板向量专门化,c++,templates,c++14,partial-specialization,C++,Templates,C++14,Partial Specialization,我有一个处理不同容器的通用函数 template<template<class, class> class C, class T, class A> void handle(C<T, A> const& c) { cout << "General handling\n"; } 模板 无效句柄(C常量和C) { 主模板声明中的“cout” 16 |(标准::向量常数和c) | 使用部分模板专门化可以做到这一点吗?函数模板不能专门化;
template<template<class, class> class C, class T, class A>
void handle(C<T, A> const& c)
{
cout << "General handling\n";
}
模板
无效句柄(C常量和C)
{
主模板声明中的“cout”
16 |(标准::向量常数和c)
|
使用部分模板专门化可以做到这一点吗?函数模板不能专门化;它只适用于类模板和变量模板(从C++14开始)。您可以改为应用
e、 g
模板
无效句柄(C常量和C)
{
cout你也可以使用函子。有了它们,你可以部分地专门化你想要的东西
#include<iostream>
#include<vector>
#include <list>
template<template<class, class> class C, class T, class A>
struct handle {
void operator()(C<T, A> const &c) {
std::cout << "General handling\n";
}
};
template<class T, class A>
struct handle<std::vector, T, A>{
void operator()(std::vector<T, A> const& c)
{
std::cout << "vector handling\n";
}
};
//To test
int main(){
std::list<int, std::allocator<int>> ls(10,0);
handle<std::list, int, std::allocator<int>>{} (ls);
std::vector<int, std::allocator<int>> vec(10,0);
handle<std::vector, int, std::allocator<int>>{} (vec);
}
#包括
#包括
#包括
模板
结构句柄{
void运算符()(C常量和C){
标准::cout
template<template<class, class> class C, class T, class A>
void handle(C<T, A> const& c)
{
cout << "General handling\n";
}
template<class T, class A>
void handle(std::vector<T, A> const& c)
{
cout << "vector handling\n";
}
#include<iostream>
#include<vector>
#include <list>
template<template<class, class> class C, class T, class A>
struct handle {
void operator()(C<T, A> const &c) {
std::cout << "General handling\n";
}
};
template<class T, class A>
struct handle<std::vector, T, A>{
void operator()(std::vector<T, A> const& c)
{
std::cout << "vector handling\n";
}
};
//To test
int main(){
std::list<int, std::allocator<int>> ls(10,0);
handle<std::list, int, std::allocator<int>>{} (ls);
std::vector<int, std::allocator<int>> vec(10,0);
handle<std::vector, int, std::allocator<int>>{} (vec);
}