我有一個類轉換爲基地的問題。 這是代碼:C++ autoconvert繼承類到基類
#define Derive_NTag_CRTP(Type) class Type: public NTagBase<Type>
template<typename Derived>
class NTagBase{
public:
NTagBase(var name) { this->_name = name; }
NTagBase(const NTagBase & ntag) { this->_name = ntag._name; }
NTagBase* append(NTagBase<Derived> *item) { _children.push_back(item); return this; }
private:
var _name;
vector<NTagBase *> _children;
};
Derive_NTag_CRTP(NTag){
public:
NTag(var name) : NTagBase(name) { }
NTag(const NTagBase & ntag) : NTagBase(ntag) { }
};
Derive_NTag_CRTP(NTagInput){
public:
NTagInput(var type) : NTagBase("input") { _type = type; }
NTagInput(const NTagBase & ntag) : NTagBase(ntag) { }
private:
var _type;
};
int main(int argc, char **argv, char **envv)
{
NTag div("div");
NTagInput button("button");
div.append(new NTag("span"));
div.append(&button);// Error 1 error C2664: 'NTagBase<Derived>::append': can not convert parameter 1 from 'NTagInput *' to 'NTagBase<Derived> *'
}
我該如何解決,如果沒有做一個明確的投? PS:我需要有一個基類指針向量,並追加到所有繼承的類中。
你想'矢量 _children'? (以避免可能的切片) –
Jarod42
我想追加一個按鈕對象到div,但按鈕對象是NTagInput,而不是NTagBase – pava91
順便說一句:'NTagInput'(':public NTagBase')與'NTagBase '不同。 NTagBase可能來自一個共同的基礎,以允許你想要的東西。 –
Jarod42