我正在测试一个属性系统,我想确保根类可以保存函数指针,这个函数指针指向的是派生类。因此,我有一些工作。大多数派生类正在工作(RC2),但当前中间类(RC1)将有编译器错误。我想能够实例化RC1和RC2。编译器错误创建时,我将与RC得到的是(对于RC1<RC1> rc1test;
行)默认的模板参数
错误C2955:“RC1”:使用类模板需要模板参数列表
错误C3203:“RC1” :非专业化的类模板不能作为模板参数“PropertyOwner”模板参数,预计一个真正的类型
我试图做RC1<> rc1test;
但这并没有帮助。这里是来源,有没有人有任何建议?
#include <iostream>
#include <map>
#include <string>
using namespace std;
template<class T, class BaseClass>
class RBase : public BaseClass
{
public:
typedef int (T::*GetFP)(void) const;
protected:
std::map<const char*, GetFP> mGetFPs;
};
class CBase
{
};
template<class PropertyOwner>
class RC1;
template<class PropertyOwner=RC1>
class RC1 : public RBase<PropertyOwner, CBase>
{
public:
int int1(void) const
{
return 1;
}
RC1()
{
mGetFPs.insert(pair<const char*, GetFP>("RC1I1I", &PropertyOwner::int1));
};
virtual void inspection(void)
{
int test = 0;
}
};
class RC2 : public RC1<RC2>
{
public:
int int2(void) const
{
return 2;
}
RC2()
{
mGetFPs.insert(pair<const char*, GetFP>("RC2I2I", &RC2::int2));
};
virtual void inspection(void)
{
int test = 0;
}
};
int main(void)
{
RC1<RC1> rc1test;
RC2 rc2test;
rc2test.inspection();
return(0);
}
要让Stackoverflow将文本视为代码,请在每行之前添加四个空格。 – fbrereto 2011-03-02 19:19:55
要在stackoverflow上格式化代码,只需缩进四个空格。或者粘贴一些代码,突出显示它,然后按下'{}'按钮。 – aschepler 2011-03-02 19:19:59
完成:-)要查看未格式化的版本,请单击编辑。 – TonyK 2011-03-03 15:34:25