0

Итак, у меня есть шаблонный класс Image, для которого я пытаюсь настроить встроенные преобразования цвета. Это упрощение кода, который досадно мне:Специализирующийся внутренний шаблон шаблонного класса

template <typename Color = colors::RGB> 
class Image { 

    /// ... 

    template <typename DestColor> 
    operator Image<DestColor>() { 
     /// when assigning with a different colorspace: 
     /// ... do the color conversion 
     /// ... and return a fresh Image<DestColor> 
    } 

    template <> 
    operator Image<Color>() { 
     /// when assigning with the same colorspace: 
     return *this; 
    } 

}; 

... проблема в том, что специализация шаблона, который следует оператор преобразования шаблонных не может быть определена на уровне класса (в соответствии с ошибками я получаю).

Получаю, что нужно указать специализацию вне очереди, но я не могу на всю жизнь понять синтаксис. Как объявить эту специализацию?

+1

Если я не ошибаюсь, вы не можете объявить полную специализацию класса шаблонов внутри класса, добавив параметр шаблона шаблона dummy по умолчанию, чтобы void мог решить проблему, если это вас не беспокоит. – Caninonos

+0

Ага, как бы это было похоже, если я могу спросить? – fish2000

+2

Это было бы похоже на [this] (http://ideone.com/Udekt9) (Edit: вы также можете сделать его приватным и объявить публичную структуру с псевдонимом/шаблоном, чтобы скрыть этот параметр фиктивного файла, если он вас беспокоит, t есть лучший способ) – Caninonos

ответ

4

Просто удалите специализацию. Ваша функция преобразования никогда не будет вызвана, если DestColor совпадает с Color. [Class.conv.fct]/р1:

Функция преобразования никогда не используется для преобразования (возможно резюме квалифицированного) объекта (возможно, CV-квалифицированного) одного типа объекта (или ссылки на он), к базовому классу (возможно, cv-qualit) , который имеет тип (или ссылку на него) или, возможно, с квалификацией cv void.

+0

О, мужик - теперь я чувствую себя немым, когда ты это указал; но да спасибо! Это, безусловно, упрощает вещи. – fish2000

Смежные вопросы