我正在測試一個屬性系統,我想確保根類可以保存函數指針,這個函數指針指向的是派生類。因此,我有一些工作。大多數派生類正在工作(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