在C++中使用if条件仅声明一个变量(模板)

Declare only one variable(template) using if condition in C++

本文关键字:一个 模板 变量 声明 C++ 条件 if      更新时间:2023-10-16

我想使用if条件创建一个模板类"stack"的单个对象,如下所示,并在if条件之外使用它。

template <class TYPE>
class stack{
..
..
};
main()
{
int opt;
cin>>opt;

以下是if条件

if(opt == 1)
    stack<int> s;
else
    stack<float> s;
s.push(1);
}

我面临的问题是,对象"s"是在块范围内创建的,如果条件允许,我无法在外部访问该对象。

这非常简单。只需将通用代码放在函数模板中即可。

template< class Number >
void foo()
{
    stack<Number> s;
    s.push( 1 );
}
auto main() -> int
{
    int opt;
    cin>>opt;
    opt == 1? foo<int>() : foo<double>();
}

s的类型必须在运行时之前知道,但您可以使用这样的接口:

class stackI{};
template <class TYPE>
class stack : public stackI {
    std::vector<TYPE> values;
    /*...*/
};
int main(int argc, char *argv[]) {
    stackI* s;
    if (1==0){
        s = new stack<int>;
    } else {
        s = new stack<double>;
    }
}  

终于找到了答案。将函数设置为基类中的"纯虚拟"函数。在派生类中定义纯虚拟函数。在main()中声明基类型指针*s,则CCD_ 2或CCD_。

class stackBase{
    public:
    virtual void push()    = 0;  //pure virtual function
    virtual void pop()     = 0;  //pure virtual function   
    virtual void display() = 0;  //pure virtual function   
};
template <typename T>
class stackDerived : public stackBase{
    T data[100];
    int top;
public:
    void push()
    {
    T ele;
    cin>>ele;
    }
//definitions of pop and display are also included in this class
};
int main()
{
stackBase *s;
if(condition)
    s = new stackDerived<int>;
else
    s = new stackDerived<char>;
within switch case
s->push(integer or character as required);
}
相关文章: