【发布时间】:2018-06-10 16:08:16
【问题描述】:
我正在看书C++ 模板。它提到 SFINAE(替换失败不是错误)主体可用于检测函数类型。 代码示例:
template <typename T>
class IsFunctionT {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename U> static One test(...);
template<typename U> static Two test(U (*)[1]); // This test overloading I cannot understand
public:
enum { Yes = sizeof(IsFunctionT<T>::test<T>(0) == 1};
enum { No = !Yes };
};
我知道它的目的是查找不能归类为数组的函数,但它如何与 U (*)[1] 一起工作。我以前从未见过这种情况。
【问题讨论】:
-
你不能有函数数组,这是会发生替换失败的地方。
-
我认为这个模板不能按预期工作。例如,引用也不能归类为数组,因此该模板会将引用类型视为函数类型。