c++ - 类模板中的类范围枚举
问题描述
假设我有一个类Person
,子类Teacher
和Lawyer
.
还有一个类Tool
和子类TeacherTool:Tool
和LawyerTool:Tool
。
现在,每个Person
都有Tool
's,并且Tool
有一个getToolUses
返回 enum的函数Usage
。IE:
enum Usage;
Person{
Tool *Tools[];
}
Tool{
Usage getToolUses();
}
Teacher:public Person{}
TeacherTool: public Tool{
TeacherUsage getToolUses();
}
// etc Lawyer
现在,您不能在 C++ 中覆盖函数返回类型,但可以使用模板类来更改返回类型,如下所示:
Person{
Tool *Tools[];
}
template <class Usage>
Tool{
virtual Usage getToolUses();
}
enum TeacherUsage;
Teacher:public Person{}
TeacherTool: public Tool<TeacherUsage>{
TeacherUsage getToolUses();
}
// etc Lawyer
接下来,我们只想Teachers
使用TeacherTools
,而不是LawyerTools
,所以我们进一步扩展模板:
template <class Usage>
Person{
Tool<Usage> *Tools[];
}
template <class Usage>
Tool{
virtual Usage getToolUses();
}
Teacher:public Person<TeacherUsage>{}
TeacherTool: public Tool<TeacherUsage>{
TeacherUsage getToolUses();
}
// etc Lawyer
enum TeacherUsage
应该是是有道理的enum Teacher::Usage
,所以我们去:
template <class Usage>
Person{
Tool<Usage> *Tools[];
}
template <class Usage>
Tool{
virtual Usage getToolUses();
}
Teacher:public Person<Teacher::Usage>{
enum Usage;
}
TeacherTool: public Tool<Teacher::Usage>{
TeacherUsage getToolUses();
}
// etc Lawyer
但是,这是行不通的,因为Teacher::Usage
声明中的模板参数Teacher
尚未声明。
有什么方法可以部分转发声明Teacher::Usage
,以便我可以在我的模板中使用它Teacher
吗?
解决方案
推荐阅读
- mysql - 如何将相同结构的表合并为一个?
- powershell - 如何使用 PowerShell 将文本添加到文件 foreach 列?
- javascript - 有没有办法使用 jQuery 选择具有特定内部值的特定类
- bash - VSCode 上的 Pipenv:为什么终端上不显示(pipenv)?
- python - Python:如何修改内存友好的代码
- mysql - MySQL表中添加额外列的解决方案
- ios - PhaseScriptExecution 失败,退出代码为非零 + Fabric
- asp.net-mvc - ASP.Net Hiddenfor 不正确的值
- javascript - 如何重新启用点击事件?
- html - 如何用css实现这样的阴影效果?