"整数"类型的函数重载

αλε*_*λυτ 4 c++ integer overloading c++11

假设存在"温度"(T)和"距离"(D)的类型.实际上,两者都可以声明为通常的typedef:

typedef int T; // might be C++11 'using' 
typedef int D;
Run Code Online (Sandbox Code Playgroud)

但是如果我想要一个重载函数:

void f(T) {}  
void f(D) {}
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为两种类型都是相同的.

哪种最现代的C++ - 实现这种过载的方式?

很明显,对于那些类型必须可以区分编译器.

Meh*_*dad 7

BOOST_STRONG_TYPEDEF正是为了这个目的.


Bap*_*cht 6

如果你想让它们可以区分,我会选择一个带转换运算符的结构.

struct T {
   int value;
   operator int() const {
       return value;
   }
}
Run Code Online (Sandbox Code Playgroud)

一个简单的价值类.

如果你想要一些现代的东西,你可以添加你自己使用的定义文字来直接从文字创建T的实例.

T operator "" _t(unsigned long long int v){ return {v};}
Run Code Online (Sandbox Code Playgroud)