enable_if не собирается
От: удусекшл  
Дата: 06.12.21 13:12
Оценка:
Всем привет!

Вроде содрал с примера на cppreference.com вариант #5 — " #5, enabled via a type template parameter", но не хочет компилякаться, говорит, что метод уже определён — member function already defined or declared


Хотел сделать, чтобы для целых типов и float работала базовая версия метода, для enum-ов — через std::underlying_type вызывалась та же версия, а для любого другого — чтобы не собиралось
Код примерно такой:

template< typename TMetaType, typename TRegType >
struct TypedIndex
{
    typedef TMetaType     MetaType;
    size_t  indexValue;
};


template< typename RegsData, typename RegsMeta >
class RegTable
{

public:

    typedef  RegsMeta  meta_t;

    template< typename TRegType >
    using typed_index_t = TypedIndex< meta_t, TRegType >;

    // Получение значения целочисленного или плавающего регистра
    template< typename TRegType
            // , typename std::enable_if< std::is_integral<TRegType>{}, bool>::type = true  // #4, enabled via a non-type template parameter
            , typename = std::enable_if< std::is_integral<TRegType>::value || std::is_floating_point<TRegType>::value >::type // #5, enabled via a type template parameter
            >
    void regGet( typed_index_t<TRegType>  idx
               , TRegType                &val
               )
    {
        //...
    }

    // Получение значения регистра типа enum
    template< typename TRegType
            //, typename std::enable_if< std::is_enum<TRegType>{}, bool>::type = true  // #4, enabled via a non-type template parameter
            , typename = std::enable_if< std::is_enum<TRegType>::value >::type // #5, enabled via a type template parameter
            >
    void regGet( typed_index_t<TRegType>  idx
               , TRegType                &val
               )
    {
        std::underlying_type<TRegType>::type tmp;
        regGet(idx, tmp);
        val = (TRegType)tmp;
    }


};


Где я рукожоп?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.