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,>::,"有哦");
}
posted @ 2020-11-17 14:38  zjh6  阅读(14)  评论(0)    收藏  举报  来源