首页 > 解决方案 > 如何根据用户输入确定容器类型

问题描述

对于我的一个学校项目,我正在实现一个包含两个单独容器的类,这些容器应该是堆栈或队列,具体取决于用户指定的容器。我的问题是,是否可以创建两个私有成员容器——我们称它们为 container1 和 container2——并指定每个容器分别是堆栈还是队列?(建设中)

标签: c++classdata-structures

解决方案


使用模板,您可能有

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只需要使用来自用户的选定枚举调用该方法。


推荐阅读