Функция шаблона C явная специализация с несколькими типами шаблонов

#c #templates #template-specialization #specialization

Вопрос:

Я хотел бы написать шаблонизированную функцию с двумя типами шаблонов: один bool и один с именем типа, и я хотел бы специализироваться на имени типа.

например, это то, что я хочу, но специализируюсь только на паре типов для T:

 template<bool b, typename T>
void foo(T val)
{
   // do different stuff based on b and type of T.
}
 

без була там я могу сделать что-то вроде этого:

 template<typename T>
void bar(T val) {
    static_assert(false, "not implemented");
}

template<>
void bar<short>(short val) {
    printf("it's a short!n");
}
 

Я не могу понять синтаксис для этого, и документы Microsoft по специализации охватывают только однотипный случай.

Комментарии:

1. Насколько я знаю, частичная специализация поддерживается только в классах. Для работы вы должны полностью специализироваться. Обходной путь состоит в том, чтобы иметь функцию, которая в таких случаях вызывает класс. Функция может вызывать статическую функцию внутри шаблонного класса, возможно, с теми же параметрами шаблона, что и функция. Затем вы можете терпеливо или полностью специализироваться на этом классе.

Ответ №1:

 template<bool B, typename T>
void foo(T constamp;)
{
    static_assert(false, "not implemented");
}

template<bool B>
void foo(short)
{
    printf("it's a short!n");
}
 

Однако на самом деле это не специализация, а перегрузка, которая вполне уместна. На самом деле, вы могли бы опустить общий случай.

Комментарии:

1. Спасибо! Я также понял, что в моем конкретном случае мне вообще не нужно создавать шаблоны на T, но это может просто перегрузить.