我是新來的c + +。這是我第一次使用模板。我想用純虛擬函數來定義某種接口,但這些函數的返回類型可能因派生類而異。所以我想過在抽象類中使用模板。我不確定我所擁有的甚至是有效的。我有類似的東西:從模板抽象類Inserting
template <class T> class InterfaceClass
{
public:
virtual T function1(const string& value)=0;
virtual T function2(const MyObj& p)=0;
}
因此,我可以從它繼承並定義一個接口來訪問函數。
class myClass : public InterfaceClass<MyObj>{
public:
MyObj InterfaceClass::function1(const string& value)
{
MyObj a = parse(value);
}
MyObj InterfaceClass::function2(const MyObj& p)
{
return p;
}
}
的目的是,我想是可以做一些事情,如:
InterfaceClass * pClass;
if(isCertainType())
pClass = new myClass();
else
pClass = new myClass2();
編譯器抱怨有InterfaceClass
類的重新定義和功能的成員不能在myClass
定義。我現在很困惑,想知道這是可能的還是我做錯了什麼。任何幫助深表謝意。
你可以發佈錯誤消息,同時聲明'myClass2'嗎? – juanchopanza
不介意我提到的錯誤。這是因爲我忘了#def頭文件 – Sednus