c++带参有成员推断.
元<类 总空,元<类...>类 操,类...O>
构 探测器{用 型=假型;};
元<元<类...>类 操,类...O>
构 探测器<空型<操<O...>>,操,O...>{用 型=真型;};
//主要就是在这里应用,空型<操<O...>>.
//下面的宏中,先用`_有`来代表这个,以后这种推导操作都可以这样做.
#define 有成员(S) \
元<类 T,型名...O> \
用 _有##S=推导(求值<T>().S(求值<O>()...)); \
元<类 T,型名...O>用 有##S=型名 探测器<空,_有##S,T,O...>::型
参考地址
假如,空型<操<S,O...>>,如有啊推导失败,则放弃这个模板匹配.,如果推导成功,则为真,返回空.
测试如下:
#include <常用>
构 A{
空 啊(串&s){
打印("啊");
}
空 啊(){
打印("啊0");
}
};
构 B{
空 哦(串&t){
打印("哦");
}
空 哦(){
打印("哦0");
}
};
有成员(啊);
有成员(哦);
空 主(){
打印(有啊<A>::值,"有啊");
打印(有哦<B>::值,"有哦");
打印(有啊<B>::值,"无啊");
打印(有哦<A>::值,"无哦");
打印(有啊<A,串>::值,"有啊");
打印(有哦<B,串>::值,"有哦");
}
浙公网安备 33010602011771号