gpt4 book ai didi

C++ 模板偏特化

转载 作者:太空狗 更新时间:2023-10-29 21:30:05 27 4
gpt4 key购买 nike

我不知道如何部分专门化这个模板。编译器提示部分特化中没有使用模板参数 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com