我有下面的类层次结构:
class Boy : Child
class Girl : Child
template<class T>
class Parent
{
vector<T> children;
}
class AnnaBoys: public Parent<Boy>
{
void ProcessChild() { do things specific to Anna boys };
};
class AnnaGirls: public Parent<Girl>
{
void ProcessChild() { do things specific to Anna girls};
};
这两个ProcessChild()
函数在做无关紧要的事情,不是可能的“模板化” add<T>
。
我希望避免创建两个Anna类,而只需执行以下操作:
template<class T>
class Anna: public Parent<T>
{
void ProcessChild()
{
if(T is Boys)
ProcessBoys();
else
ProcessGirls();
};
};
是否有任何干净的方法可以在运行时不执行dynamic_cast呢?
谢谢。
您可以专门化单个成员函数,而无需指定整个类。在这种情况下:
标头:
template<typename T>
class Anna : Parent<T> {
public:
void ProcessChild() {
// default implementation (if desired)
}
};
template<> void Anna<Boy>::ProcessChild();
template<> void Anna<Girl>::ProcessChild();
源文件:
template<> void Anna<Boy>::ProcessChild() {
// implementation for boys
}
template<> void Anna<Girl>::ProcessChild() {
// implementation for girls
}
inline
如果要保留仅标头中的内容,则可以通过声明标头中的特殊成员函数来实现:
template<typename T>
class Anna : Parent<T> {
public:
void ProcessChild() {
// default implementation (if desired)
}
};
template<> inline void Anna<Boy>::ProcessChild() {
// implementation for boys
}
template<> inline void Anna<Girl>::ProcessChild() {
// implementation for girls
}
感谢@Deduplicator发现这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句