c++ - 数组的部分模板特化

标签 c++ templates

为此搜索过,但找不到类似的问题。如果有请关闭此问题。 这不是我的真实代码,只是一个演示示例:-

#include <iostream>

// Normal template class with a destructor
template <class T> class Test
{
public:
    ~Test() { std::cout << "Normal \n";}
};

// Partial specialization for arrays
template<class T> class Test<T[]>
{
public:
    ~Test() { std::cout << "Array \n"; }
};


int main()
{
    Test<int[3]> i;
}

当我编译它时,它不会调用数组的专用版本。如果我用

替换模板
template<class T> class Test<T[3]>
{
public:
    ~Test() { std::cout << "Array \n"; }
};

然后它确实调用了特化,但我希望为任何数组调用它,而不仅仅是指定大小的数组。有什么方法可以编写用于所有数组的特化吗?

最佳答案

使用额外的非类型参数捕获大小:

#include <iostream>

template <class T> class Test
{
public:
    ~Test() { std::cout << "Normal \n";}
};

template<class T, size_t N> class Test<T[N]>
{
public:
    ~Test() { std::cout << "Array " << N << '\n'; }
};

int main()
{
    Test<int[3]> i;  // Array 3
    Test<int[5]> j;  // Array 5
}

关于c++ - 数组的部分模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12261762/

相关文章:

c++ - 对如何更新 Mingw 有一点帮助吗?

c++ - nanomsg是否有 'frames'作为zeromq的概念?

c++ - std::array 作为类的模板参数

laravel 访问 Blade 中的模型常量

c++ - 如何在 C 中使用 printf 查找对象类型?

c++ - vector 中结构的类型名称是什么

java - 如何使用 SWIG 返回指向用户定义类对象的指针

c++ - 当左值引用参数和右值引用参数作为相同的转发引用类型传递时,为什么它不起作用?

c++ - 具有一个显式参数的模板

c++ - 将标量 + std::array + std::tuple 转换为大元组