use*_*703 3 c++ oop model class
我有以下类的层次结构:
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};
};
Run Code Online (Sandbox Code Playgroud)
ProcessChild()
这里的两个功能是做无关的事情,而不是"寺庙"的方式add<T>
可能.
我希望避免创建两个Anna类而只是这样做:
template<class T>
class Anna: public Parent<T>
{
void ProcessChild()
{
if(T is Boys)
ProcessBoys();
else
ProcessGirls();
};
};
Run Code Online (Sandbox Code Playgroud)
没有在运行时执行dynamic_cast,有没有干净的方法来做到这一点?
谢谢.
Win*_*ute 10
您可以专门化各个成员函数,而无需指定整个类.在这种情况下:
标题:
template<typename T>
class Anna : Parent<T> {
public:
void ProcessChild() {
// default implementation (if desired)
}
};
template<> void Anna<Boy>::ProcessChild();
template<> void Anna<Girl>::ProcessChild();
Run Code Online (Sandbox Code Playgroud)
源文件:
template<> void Anna<Boy>::ProcessChild() {
// implementation for boys
}
template<> void Anna<Girl>::ProcessChild() {
// implementation for girls
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
感谢@Deduplicator发现它.