一个typedef在C++中,我想有一个类,其构造函数如下:如何检查如果一个类型是INT
class A {
explicit A(A* other) { ... }
explicit A(intptr_t other) { ... }
};
这样做的问题是,如果用户与初始化
A a(0);
然后,在一个64位的系统上,编译器会抱怨它不知道0
应该被转换为A*
还是intptr_t
,这足够公平。因为我想这个简单的符号来上班,我添加了下面的构造:
explicit A(int a) { assert(a==0); ... }
的说法是,因为这是唯一的整数,这是有道理的。现在,问题出现在32位系统中,其中intptr_t
实际上是...... int
!所以现在,系统抱怨有两个构造函数采用相同的参数类型(这同样足够公平)。
所以我的问题是:是否有与预处理的方式来检测intptr_t
实际上是int
,在这种情况下,不编译int
构造。或者,还有另一种方法可以使A a(0)
符号有效,而无需添加构造函数int
,但是不会删除两个第一个构造函数中的任何一个(并且不会使它们隐含)。
你不能删除A(A *其他)的构造函数,并用A(A和其他)替换。对我来说这似乎更自然(假设你正在复制其他而不是链接)。 –