在C++中使用if条件仅声明一个变量(模板)
Declare only one variable(template) using if condition in C++
我想使用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);
}
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 如何将模板的实例传递给另一个模板的另一个实例?
- 如果模板参数是另一个模板的实例化,则键入特征测试
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 具有多个参数的模板化类专用化,其中一个模板参数是模板本身
- 一个模板方法,用于同时接受常量和非常量参数
- 如何使模板化类成为另一个模板化类的好友
- 使用当前模板作为其中一个模板参数的模板参数
- 通过将其中一个模板更改为 muliset 后,我可以在 PBDS 排序集上使用计数功能<int>less_equal<int>
- 如何创建一个模板化函数,可以在任何具有字符串键的 std::map 上运行?
- 如何使用另一个模板化类的实例模板化类?
- 如何检查一个模板是否是另一个模板的类成员
- 我已经创建了一个模板函数,但是在检查输入是奇数还是偶数时收到错误 C++.
- 是否可以有一个模板函数,可以将向量和非向量类型都作为参数
- 如何将模板化类实例作为模板参数传递给另一个模板?
- C++模板:无法匹配可变参数类模板中的最后一个模板
- 为什么 std::分配器是一个模板?
- 当类是另一个模板的模板参数时,可以使用类模板参数推断吗?