确定typedef的类型

gsa*_*ras 1 c++ typedef c++11

我想用积极无限的东西.但是,我的代码使用的数据类型是由其他人的类进行typedef.这意味着它可以是int,float,double和几乎数值类型.

以前当我使用无穷大时,我会喜欢INT_MAX整数等等.但是,我可以确定(在编译时)我使用的类型吗?

我找到了这个答案,但我认为这不是我要找的.

但另一方面,我想不出一个优雅的方法来实现这一目标.

在代码中:

typedef float FT;

// in another file
//if FT is int
int inf = INT_MAX;

...

//if FT is float
float inf = FLOAT_MAX;
Run Code Online (Sandbox Code Playgroud)

但是,这仍然不太好,因为那时我想将它作为参数传递给函数.这个功能的签名是第一个浮现在脑海中的问题.

[编辑]

签名可以使用typedef.

Ale*_*vig 5

也许你可以看看numeric_limits<T>.

// numeric_limits example
#include <iostream>     // std::cout
#include <limits>       // std::numeric_limits

typedef float FT;

int main () {
  std::cout << std::boolalpha;
  std::cout << "Minimum value for FT: " << std::numeric_limits<FT>::min() << '\n';
  std::cout << "Maximum value for FT: " << std::numeric_limits<FT>::max() << '\n';
  std::cout << "FT is signed: " << std::numeric_limits<FT>::is_signed << '\n';
  std::cout << "Non-sign bits in FT: " << std::numeric_limits<FT>::digits << '\n';
  std::cout << "FT has infinity: " << std::numeric_limits<FT>::has_infinity << '\n';
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

typedef float FT;

Minimum value for FT: 1.17549e-38
Maximum value for FT: 3.40282e+38
FT is signed: true
Non-sign bits in FT: 24
FT has infinity: true
Run Code Online (Sandbox Code Playgroud)

typedef int FT;

Minimum value for FT: -2147483648
Maximum value for FT: 2147483647
FT is signed: true
Non-sign bits in FT: 31
FT has infinity: false
Run Code Online (Sandbox Code Playgroud)