Есть ли способ выбирать между различными реализациями классов в зависимости от типа аргумента шаблона?C++

Программы на C++. Форум разработчиков
Anonymous
 Есть ли способ выбирать между различными реализациями классов в зависимости от типа аргумента шаблона?

Сообщение Anonymous »

Например, я хочу создать массив. Массив принимает в качестве аргумента шаблона тип, с которым нужно иметь дело. Теперь, если тип является примитивным (int, double, short), то можно использовать поверхностное копирование, а если это класс, необходимо использовать конструктор копирования класса. Если бы это был один из методов, это было бы легко, я мог бы использовать SFAINE с std::enable_if для возвращаемого значения, но это не относится к конструкторам.

Я попробовали следующее, но GCC-9 выдает ошибку компиляции:

Код: Выделить всё

template< typename Type, typename std::enable_if< std::is_integral< Type >::value() >::type* = nullptr >
class Array
{
...Implementation...
}

template< typename Type, typename std::enable_if< std::is_integral< Type >::value() == false >::type* = nullptr >
class Array
{
...Implementation 2...
}
Кроме того, я попробовал использовать конструктор по умолчанию, но GCC-9 все еще не доволен:

Код: Выделить всё

template< typename Type >
class Array
{

Array( typename std::enable_if< std::is_integral< Type >::value() >::type* = nullptr )
{}

Array( typename std::enable_if< std::is_integral< Type >::value() == false >::type* = nullptr )
{}

}
Есть ли способ создать класс с одинаковым именем, который будет иметь разную реализацию в зависимости от типа заданного аргумента шаблона?
Кажется, есть похожие вопросы, но не совсем по моему мнению, если я ошибаюсь, скажите мне, и я удалю вопрос

Подробнее здесь: https://stackoverflow.com/questions/570 ... -on-the-ty

Вернуться в «C++»