C++ 用于检查类型相等性的编译时函数
我需要实现自包含的编译时函数来检查类型相等性(没有参数的函数模板C++ 用于检查类型相等性的编译时函数,c++,templates,compile-time,C++,Templates,Compile Time,我需要实现自包含的编译时函数来检查类型相等性(没有参数的函数模板bool eqTypes()) 自给自足意味着不依赖图书馆 我不擅长这一切。这是我试过的,但不是我需要的 template<typename T> bool eq_types(T const&, T const&) { return true; } template<typename T, typename U> bool eq_types(T const&, U const&a
bool eqTypes()
)
自给自足意味着不依赖图书馆
我不擅长这一切。这是我试过的,但不是我需要的
template<typename T>
bool eq_types(T const&, T const&) {
return true;
}
template<typename T, typename U>
bool eq_types(T const&, U const&) {
return false;
}
模板
布尔均衡类型(T常数&,T常数&){
返回true;
}
模板
布尔均衡类型(T常数&,U常数&){
返回false;
}
这很简单。只需定义一个类型trait和一个helper函数:
template<typename T, typename U>
struct is_same
{
static const bool value = false;
};
template<typename T>
struct is_same<T, T>
{
static const bool value = true;
};
template<typename T, typename U>
bool eqTypes() { return is_same<T, U>::value; }
请注意,类型trait的作用几乎相同,它是标准库的一部分 以下是如何在C中实现这一点,而无需任何神奇的GCC扩展:
#define CHECKED_TYPE(original_type, p) ((conversion_type*) (1 ? p : (original_type*) 0))
例如:
void *q = CHECKED_TYPE(int, &y);
如果y
不是int
,将触发编译错误有关说明,请参阅。是否允许使用?演示了如何自己实现它,但它需要(很简单)调整为函数而不是结构。不妨
constexpr bool eqTypes()
@timothyshiels:True,我假设C++03是目标。我将添加一个C++11version@liuml07你能详细说明你的陈述吗?我不知道你的意思here@AndyProwl我不知道eqTypes()
的预期答案。我想这是真的。std::is_same
也不能用于此。如果预期的答案是false
,看起来不错。@liuml07:eqTypes()
应该返回false
。这是为了检查类型是否相等,而不是一个是否可以转换为另一个,或者从另一个派生出来,等等——还有其他类型特征可以达到这些目的
void *q = CHECKED_TYPE(int, &y);