作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不知道如何部分专门化这个模板。编译器提示部分特化中没有使用模板参数 N
#include <boost/multi_array.hpp>
template<typename T, class A>
struct adaptable;
template<typename T, size_t N>
struct adaptable<T,
// line below is the problem
typename boost::multi_array<T,N>::template array_view<2>::type>
{
typedef typename boost::multi_array<T,N>::template array_view<2>::type type;
};
我可以添加虚拟模板参数来让编译器静音。
template<typename T, class A, class A0 = A>
struct adaptable;
template<typename T, size_t N>
struct adaptable<T,
typename boost::multi_array<T,N>::template array_view<2>::type,
boost::multi_array<T,N> >
{
typedef typename boost::multi_array<T,N>::template array_view<2>::type type;
};
有没有更直接的方法?
最佳答案
我在您的示例中没有看到任何看起来像部分特化的内容。部分特化是一种特化,它为一些基本模板参数指定确切的类型,但让其他的保持开放。例如:
template <class T, class U>
struct my_template {
// the base template where both T and U are generic
};
template <class T>
struct my_template<int> {
// A partial specialization where T is still generic, but U == int
};
为了支持偏特化,基本模板必须至少有两个模板参数(称为数字 N)。部分特化的模板可以有 1..N-1 个模板参数。部分特化必须位于编译器在尝试编译部分特化之前已经“看到”基本模板的位置。部分特化被编写为与基本模板完全不同的模板(当然,基本模板和所有特化必须具有相同的名称)。
关于C++ 模板偏特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3445841/
我是一名优秀的程序员,十分优秀!