Использование метода класса шаблона вне класса в таблице диспетчеризации

Я пишу этот небольшой шаблонный класс, наследующий от интерфейса. Внутри моего класса я объявил переменную, которую хотел бы использовать снаружи, и поместил ее в таблицу диспетчеризации. когда я пытаюсь скомпилировать мою программу, она выдает ошибку

Это мой исходный код:

template <typename T> class Operand;
typedef struct  s_typeInfo
{
    int     enum_nb;
    bool    (*fct_cast)(void);
}               t_typeInfo;


t_typeInfo typeInfo[] =
{
    {0, Operand::castInt8},
};

template <typename T>
class Operand : public IOperand {
    ...
    bool    castInt8(void) {...}
}

Я пытался решить эту проблему по-разному, но никто не работает. Как я мог это исправить? Заранее спасибо:)

1 ответ

Есть ряд вещей, которые вызывают ошибку при компиляции Вашего кода.

  1. Прежде всего это конструкция Operand::castInt8 не имеет смысла компилятору как Operand это не класс / структура, а шаблон класса. Чтобы получить указатель на функцию Вам нужен конкретный тип, а не его шаблон. Поэтому что-то вроде этого было бы более разумным Operand<int>::castInt8 например.

  2. Тип bool castInt8(void) не является bool (*)(void) как это кажется. Нестатические функции-члены имеют более сложные типы. В вашем случае это будет bool (Operand<sometype>::*)(void),

  3. И последнее - компилятор не знает Operand шаблон имеет член castInt8 до определения. Таким образом, вы должны изменить порядок так:

    template <typename T>
    class Operand : public IOperand {
        ...
        bool    castInt8(void) {...}
    }
    
    t_typeInfo typeInfo[] =
    {
        {0, &Operand<sometype>::castInt8},
    };
    

Собрав все это вместе, это будет выглядеть так:

template <typename T> class Operand;

typedef struct  s_typeInfo
{
    int     enum_nb;
    bool    (Operand<int>::*fct_cast)(void);
}               t_typeInfo;


template <typename T>
class Operand {
    public:
    bool    castInt8(void) {}
};


t_typeInfo typeInfo[] =
{
    {0, &Operand<int>::castInt8},
};
Другие вопросы по тегам