我正在学习SFINAE(替换失败不是)
@H_502_2@我在网站上找到了一个例子,
template<typename T> class is_class { typedef char yes[1]; typedef char no [2]; template<typename C> static yes& test(int C::*); // What is C::*? template<typename C> static no& test(...); public: static bool const value = sizeof(test<T>(0)) == sizeof(yes); };
我在第5行找到了一个新的签名,int C :: *.起初我认为它是运算符*但我认为它不是真的.@H_502_2@请告诉我它是什么.
解决方法
int C :: *是指向类C的成员的指针,其类型为int.
例:
struct C { C () : a(0),b(0) {} int a; int b; }; int main() { int C::*member1 = &C::a; int C::*member2 = &C::b; C c1; c1.*member1 = 10; // Sets the value of c1.a to 10 c1.*member2 = 20; // Sets the value of c1.b to 20 }