Частичная специализация шаблона C ++ - PullRequest
3 голосов
/ 10 августа 2010

Я не могу понять, как частично специализировать этот шаблон.компилятор жалуется на то, что параметр шаблона 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;
};

Я могу добавить фиктивный параметр шаблона только для того, чтобы заставить компилятор замолчать.

1 Ответ

3 голосов
/ 10 августа 2010

Я не вижу в вашем примере ничего похожего на частичную специализацию. Частичная специализация - это специализация, которая указывает точные типы для некоторых параметров базового шаблона, но оставляет другие открытыми. Например:

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. Частичная специализация должна быть расположена там, где компилятор уже «видел» базовый шаблон, прежде чем пытаться скомпилировать частичную специализацию. Частичная специализация написана как совершенно отдельный шаблон от базового шаблона (хотя, конечно, базовый шаблон и все специализации должны иметь одно и то же имя).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...