Шаблон работает как параметры шаблона по умолчанию

Мое объявление класса начинается следующим образом:

template<
class P,
class B,
class comparePosition = compareHorizontal< P >
>
class BlahBlah  { ...

где compareHorizontal это шаблонная функция Когда я пытаюсь скомпилировать, Clang выплевывает

[...]/entity.hpp:57:33: error: type name requires a specifier or qualifier
class comparePosition = compareHorizontal< P >
^

[...]/entity.hpp:57:33: error: C++ requires a type specifier for all declarations
class comparePosition = compareHorizontal< P >
^~~~~~~~~~~~~~~~~

(и много других ошибок в той же строке).

Если я просто удаляю параметр шаблона по умолчанию, оставляя все остальное нетронутым, он просто компилируется. Поэтому мне интересно, как бы я использовал шаблон функции в качестве аргумента по умолчанию, если это вообще возможно? Или мне было бы лучше просто сделать класс функтора с operator() что вызывает compareHorizontal и использовать это вместо этого?

0

Решение

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

  template<
class P,
class B,
class C=bool (*)(P&)
>
class BlahBlah  {
};

и это компилируется. Это как если бы вы сказали, что класс C = 5; это также не будет компилироваться, потому что 5 не тип. Я предлагаю вам использовать структуру в таком случае.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]