c++中的模板变量
Template variables in C++
我有这样的代码:
template <class T>
T GetMax (T a, T b) {
return (a>b?a:b);
}
int main () {
int i=51, j=26, k;
long l=100, m=15, n;
k=GetMax(i,j);
n=GetMax(l,m);
cout << k << endl;
cout << n << endl;
return 0;
}
如何更改变量k和n的数据类型,使它们能够动态地接受返回值?如果返回值是双精度类型,那么k和n将自动成为双精度类型,所以我不需要为传递int还是double而烦恼。
我试着在网上和我的书中搜索,但没有运气。你能帮帮我吗?我是模板新手。
在c++ 11中,您可以使用auto
:
auto k = GetMax(i,j);
auto n = GetMax(l,m);
k
和n
的类型由初始化它们的表达式推导出来。
在c++ 11之前,需要显式地给出类型。但是,您应该总是能够以某种形式编写类型,因为您知道参数的类型。
你不能,但你不需要。
GetMax总是在你知道你传入的类型的上下文中被调用,所以你知道返回类型是什么。
例如,如果传入两个int型,结果将是int型。如果传入一个double类型和一个long类型,它将是double类型。
将模板视为类型安全的宏。用被替换类型的函数体替换函数的调用,这就是它要做的。
如果你不遵守规则,你可以使用引用让编译器警告你。
template <class T>
void GetMax (T a, T b, T& output) {
output = (a>b?a:b);
}
但如果你可以使用c++ 11,使用auto
代替
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 执行函数时导致崩溃的变量
- 变量没有改变?通过向量的函数调用