考虑以下示例。我的代码中的某处是名称ADDRESS
。我不知道x
是一个类型还是一个对象(它可能都是)。有没有办法获得x
的类型,即x
本身x
是一个类型,还是x
如果decltype(x)
是一个对象?
我尝试做一些像
这样简单的事情x
但这会产生错误,因为decltype(int)
不是表达式。有没有替代方法可以做到这一点?
我想要像:
int
我怎样才能完成这项工作?
答案 0 :(得分:23)
namespace detail_typeOrName {
struct probe {
template <class T>
operator T() const;
};
template <class T>
T operator * (T const &, probe);
probe operator *(probe);
}
#define mydecltype(x) decltype((x) * detail_typeOrName::probe{})
在此代码中,(x) * detail_typeOrName::probe{}
可以通过两种方式解析:
x
是变量,则x
乘以probe
的实例。x
是一种类型,则这是probe
取消引用并转换为X
的实例。通过仔细重载运算符,两种解释都有效,并且都返回我们寻求的类型。