函数重载为"积分"类型

时间:2014-07-15 07:56:13

标签: c++ c++11 integer overloading

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

typedef int T; // might be C++11 'using' 
typedef int D;

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

void f(T) {}  
void f(D) {}

它不起作用,因为两种类型都相同。

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

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

2 个答案:

答案 0 :(得分:7)

为此,

BOOST_STRONG_TYPEDEF 完全

答案 1 :(得分:6)

如果您希望它们可以区分,我会选择带转换运算符的结构。

struct T {
   int value;
   operator int() const {
       return value;
   }
}

一个简单的价值类。

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

T operator "" _t(unsigned long long int v){ return {v};}