Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “的函数重载”;积分;类型_C++_C++11_Integer_Overloading - Fatal编程技术网

C++ “的函数重载”;积分;类型

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 {

假设有“温度”(T)和“距离”(D)两种类型。事实上,两者都可以像通常的typedef一样声明:

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