Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 部分模板向量专门化_C++_Templates_C++14_Partial Specialization - Fatal编程技术网

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);

}