c++ - 如何根据用户输入确定容器类型
问题描述
对于我的一个学校项目,我正在实现一个包含两个单独容器的类,这些容器应该是堆栈或队列,具体取决于用户指定的容器。我的问题是,是否可以创建两个私有成员容器——我们称它们为 container1 和 container2——并指定每个容器分别是堆栈还是队列?(建设中)
解决方案
使用模板,您可能有
template <typename Container1, typename Container2>
class MyClass
{
public:
// ....
private:
Container1 c1;
Container2 c2;
};
// Dispatch functions for non uniform code
template <typename T> void do_job_specific(std::stack<T>& s) {/*..*/}
template <typename T> void do_job_specific(std::queue<T>& d) {/*..*/}
// Common code
template <typename Container> void do_job_common(Container& d) {/*..*/}
和主要工作
template <typename T> // would be MyClass<C1, C2>
void do_job()
{
T myClass;
// ...
}
enum class EContainer { Stack, Queue};
void dispatch_job(EContainer e1, EContainer e2)
{
using T1 = std::stack<int>;
using T2 = std::queue<int>;
if (e1 == EContainer::Stack) {
if (e2 == EContainer::Stack)) {
do_job<std::stack<T1, T1>>();
} else {
do_job<std::stack<T1, T2>>();
}
} else {
if (e2 == EContainer::Stack)) {
do_job<std::stack<T2, T1>>();
} else {
do_job<std::stack<T2, T2>>();
}
}
}
现在main
只需要使用来自用户的选定枚举调用该方法。
推荐阅读
- python - 是否可以在 GridSearchCV() 中同时使用 MLPRegressor() 和 make_pipeline()?
- spring - 在“mvn clean install”期间的功能测试之前,Wiremock 不会启动
- android - 在不卸载 [INSTALL_FAILED_UPDATE_INCOMPATIBLE] 的情况下将 Android Native 应用程序更新到 Flutter
- javascript - 如何理解 react-three-fiber 中的“useBox”
- blockchain - 无论采用哪种方法,我都无法在 VSCode 中导入 Open Zeppelin 合约
- c - GDB 错误 - 不是可执行格式:文件格式无法识别
- python - 如何在 hdf5 文件的多个组中拆分数据?
- r - 从每小时数据创建每日数据的时间序列
- sql-server - 使用 SQL Server 后端将图片插入到 Access 表中
- terraform - 带有专用链接和专用终结点的 Azure Cosmos DB 错误“无法刷新集合列表。请稍后再试”