Я использовал метафункцию std::enable_if
в своем шаблоне класса, чтобы указать, что ему разрешено генерировать классы только для переменных, которые имеют GameCard
в качестве базового класса. Это прекрасно работает само по себе, когда я реализую встроенные функции. Однако, если я хочу реализовать функции шаблона вне тела заголовка, я сталкиваюсь с проблемой, которую не могу понять, как правильно указать функцию, которую я хочу реализовать.
Сократить пример кода:
#include <string>
#include <memory>
#include <vector>
struct GameCard {};
template<class T, class = std::enable_if_t<std::is_base_of<GameCard, T>::value>>
struct CardStack {
std::vector<T> cards;
bool Test();
};
Моя IDE генерирует это как спецификацию функции:
template<class T, class>
bool CardStack<T, <unnamed>>::Test() {
return false;
}
Это, очевидно, неправильно, так как я получаю ошибки компилятора. Но я понятия не имею, как это сделать правильно. Кто-нибудь из вас знает, как сделать это правильно?