考虑这一行:
template <typename C> static yes& test(reallyHas<std::string (C::*)(), &C::serialize>*) { }
我在一篇关于SFINAE的文章中找到了它here。我很难理解这条线。该行上方的注释表示“std::string (C::*)()
是函数指针声明。”
我知道函数指针作为参数如下:
void foo(bar (fptr*)(cat c, meow m)){}
但::
做什么呢? C
是一种类型,位于与fptr
相同的句法位置。但fptr
是实体的名称(指向作为参数传递的函数的指针),所以...这些如何完全对应?