Код: Выделить всё
#include
class Base {
public:
virtual bool f() {
return true;
}
};
template
class Derived : public Base {
std::enable_if_t< std::is_copy_constructible::value, bool > f() override {
return true;
}
std::enable_if_t< !std::is_copy_constructible::value, bool > f() override {
return false;
}
};
Однако я не понимаю, как мне решить эту проблему. В документах, которые я нашел, говорится, что мне следует использовать шаблоны для этой функции. Однако это не работает, поскольку функция задумана как виртуальная.
Я попытался разгрузить проблему, вызвав невиртуальную функцию, но мне также не удалось ее скомпилировать:
Код: Выделить всё
template
class Derived : public Base {
virtual bool f() override {
return f_impl();
}
private:
template< std::enable_if_t< std::is_copy_constructible::value > = 0 >
bool f_impl() {
return true;
}
template< std::enable_if_t< !std::is_copy_constructible::value > >
bool f_impl() {
return false;
}
};
int main() {
Derived a;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/57345414/using-enable-if-on-virtual-functions[/url]
Мобильная версия