我正在编写从接口继承的这个小型模板类。 在我的类内部,我声明了一个我想在外部使用的变量,并将其放入调度表中。 当我尝试编译程序时,会抛出错误
这是我的源代码:
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) {...}
}
我一直试图以许多不同的方式来解决这个问题,但是没有一个人能起作用。我该如何解决?预先谢谢你:)
答案 0 :(得分:3)
有很多事情会导致您的代码编译出错。
首先,这种构造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},
};