C++ “的函数重载”;积分;类型
假设有“温度”(T)和“距离”(D)两种类型。事实上,两者都可以像通常的typedef一样声明:C++ “的函数重载”;积分;类型,c++,c++11,integer,overloading,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++方式可以实现这种过载? 很明显,对于编译器来说,这些类型必须是可区分的。如果您希望它们是可区分的,我会选择带有转换运算符的结构 struct T {
typedef int T; // might be C++11 'using'
typedef int D;
但如果我想要重载函数:
void f(T) {}
void f(D) {}
它将不起作用,因为这两种类型是相同的
哪种最现代的C++方式可以实现这种过载?
很明显,对于编译器来说,这些类型必须是可区分的。如果您希望它们是可区分的,我会选择带有转换运算符的结构
struct T {
int value;
operator int() const {
return value;
}
}
一个简单的值类
如果您想要一些现代的东西,您可以添加您自己使用的已定义文字,以直接从文字创建T的实例
T operator "" _t(unsigned long long int v){ return {v};}
正是为了这个目的而创建的。
typedef
s(以及在C++11中使用s)创建别名。您需要使它们成为实际的类以在其上重载。从Bill G还在编写代码时起,我们就一直在使用struct{int x;}
来执行此操作。我认为最好将const
添加到操作符int
。