【发布时间】:2019-07-20 05:42:11
【问题描述】:
参考
问题与以下代码段有关:
template<typename T>
class is_class {
typedef char yes[1];
typedef char no [2];
template<typename C> static yes& test(int C::*); // selected if C is a class type
template<typename C> static no& test(...); // selected otherwise
public:
static bool const value = sizeof(test<T>(0)) == sizeof(yes);
};
在上述类模板定义中,is_class<T>::value 的public 定义使用类模板is_class 实例化中使用的参数T 实例化嵌套静态模板函数test。
如果以上解释正确,我有以下问题:
- 如何解释嵌套静态模板函数
test的重载版本?
SFINAE 如何使用上述重载为给定的T 填充模板类is_class<T> 的公共布尔变量value,根据sizeof(test<T>(0)) == sizeof(yes) 使用真或假?我不确定我是否理解在test<T> 的实例化中传递看似随机整数值0 应该选择还是消除任一过载?有人可以举例说明吗?
- 我也不清楚使用
yes[1]和no [2]这两个嵌套类型的逻辑,这两个类型都被定义为char。假设yes[1]是大小为 1 的 char 数组的类型别名,no[2]是大小为 2 的 char 数组的类型别名,那么这个逻辑如何使用 SFINAE 集成到重载选择/消除中?
欣赏你的想法。
【问题讨论】:
标签: c++ logic implementation sfinae