class CParent
用于在m_data
中存储特定于“版本”的某些数据。
每个class CChild*
将按照该组中的相同规则处理自己的数据组。
现在我必须在每个CParent *replicate(int ver)
类中声明CChild*
,但是它们是相同的,我认为只能在父类中定义此函数。
class CParent
{
public:
int m_ver;
std::vector<int> m_data;
CParent(int ver)
{
m_ver = ver;
};
CParent *replicate(int ver) { return nullptr; };
void print(int ver) {
if (m_ver == ver) {
// print m_data
}
else {
CParent *pobj = replicate(ver);
// transfer data from
pobj->print(ver);
delete pobj;
}
}
};
class CChild1 : public CParent
{
public:
void CChild1::operator=(const CChild1& src)
{
// code transfering data from src(ver) to this(m_ver);
};
CChild1(int ver) :CParent(ver)
{
// code specific to CChild1 - m_data contain version depenedent data
};
CParent *replicate(int ver)
{
return new CChild1(ver);
}
};
class CChild2 : public CParent
{
public:
void CChild2::operator=(const CChild2& src)
{
// code transfering data from src(ver) to this(m_ver);
};
CChild2(int ver) :CParent(ver)
{
// code specific to CChild2 - m_data contain version depenedent data
};
CParent *replicate(int ver)
{
return new CChild2(ver);
}
};
int main()
{
int ver = 15;
std::vector<CParent*> vecObjets;
vecObjets.push_back(new CChild1(ver));
vecObjets.push_back(new CChild2(ver));
for (auto it : vecObjets)
it->print(1);
for (auto it : vecObjets)
it->print(7);
for (auto it : vecObjets)
it->print(15);
}
我认为我可以做这样的事情:
CChild* CChild::replicate(int iversion) {
return new<decltype(*this)>(iversion);
};
所以基本上我需要函数来创建从父类调用的子类的副本。 能做到吗?
答案 0 :(得分:4)
您可以在此处使用间接重复模板模式(CRTP)。如果您觉得有趣,可以在Wiki上阅读有关CRTP的信息。
select = element(by.cssContainingText('mat-card-title', 'Classifications'))
.all(by.css('mat-pseudo-checkbox'));