多种数据类型的单个模板对象
single template object for multiple data types
class mypair {
T a, b;
public:
mypair (T first, T second)
{a=first; b=second;}
T getmax ();
};
template <class T>
T mypair<T>::getmax ()
{
T retval;
retval = a>b? a : b;
return retval;
}
int main () {
int i;
cin>>i;
if(i==0)
mypair <int> myobject (100, 75);
else
mypair <float> myobject (100, 75);
cout << myobject.getmax();
return 0;
}
我想根据 i 的值创建模板类的单个对象,如果 i 的值为 0,则创建一个数据类型为 int else float 的模板类。上面的程序抛出了一个错误"myobject",没有在我调用 getmax 函数的最后一行的倒数第二行中声明。
我怎样才能做到这一点>
为什么不编写一个函数模板来完成这项工作?
template <typename T>
doStuff()
{
mypair <T> myobject (100, 75);
std::cout << myobject.getmax();
}
然后
if(i==0)
doStuff<int>();
else
doStuff<float>();
问题是范围:
if(i==0)
{
mypair <int> myobject (100, 75);
} // myobject is now out of scope and unusable
else
{
mypair <float> myobject (100, 75);
} // myobject is now out of scope and unusable
您需要为模板声明非模板基然后你可以声明一个指向基的指针在你的 if 子句中做一个新的然后你可以在下面的代码中使用指针
顺便说一句,即使对于单行块,始终包含{}通常也很有帮助
这是因为 if 和 else 情况的范围。你可以通过这样做来实现这一点
if(i==0){
mypair <int> myobject (100, 75);
cout << myobject.getmax();
}
else{
mypair <float> myobject (100, 75);
cout << myobject.getmax();
}
由于对象在 if 的范围内是活的,否则它之外的范围将是死的。
if{
// alive scope
}
//dead scope
相关文章:
- 如何限制在C++中为单个类创建的对象数量?
- 为什么平均打印数组元素比打印单个对象慢C++?
- 在C++中有多个指向单个对象的指针的正确方法是什么?
- USB-HID 读/写(重叠)等待单个对象不返回C++
- 使用 new in C++(在 Windows 上)分配大于 2GB 的单个对象
- 从单个.cpp构建共享对象
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 如何在考虑对象切片的同时通过传入单个 Base 对象来打印出数组中的对象?
- 可能从单个方法返回不同类型的对象
- 如何使用单个对象调用具有相同名称的两个类函数
- 单个文件库的对象文件 (.o) 与头文件
- 将矩阵建模为单个统一缓冲区对象
- 执行 commaind "systeminfo"后,等待单个对象停止
- 如何在单个 (.a) 存档中仅获取所需的对象文件
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- C++ unordered_map单个对象上的迭代器
- 为多个对象创建单个线程
- 在向量中存储模板化对象(在<int><double>单个向量中存储类、类)
- C 中单个对象的线程安全容器