Использование метода класса шаблона вне класса в таблице диспетчеризации
Я пишу этот небольшой шаблонный класс, наследующий от интерфейса. Внутри моего класса я объявил переменную, которую хотел бы использовать снаружи, и поместил ее в таблицу диспетчеризации. когда я пытаюсь скомпилировать мою программу, она выдает ошибку
Это мой исходный код:
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 ответ
Есть ряд вещей, которые вызывают ошибку при компиляции Вашего кода.
Прежде всего это конструкция
Operand::castInt8
не имеет смысла компилятору какOperand
это не класс / структура, а шаблон класса. Чтобы получить указатель на функцию Вам нужен конкретный тип, а не его шаблон. Поэтому что-то вроде этого было бы более разумнымOperand<int>::castInt8
например.Тип
bool castInt8(void)
не являетсяbool (*)(void)
как это кажется. Нестатические функции-члены имеют более сложные типы. В вашем случае это будетbool (Operand<sometype>::*)(void)
,И последнее - компилятор не знает
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},
};