PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[心得] 编译时确定函数有无宣告
楼主:
loveflames
(咕啾咕啾魔法阵)
2017-10-24 10:19:53
class nothing;
nothing f(nothing);//避免f没宣告时编译错误
template<typename Type,Type Ptr>
class helper;
//存在f,且型态与Type相符时才展开这个,Type即用来确认的函数指标型别
template<typename Type>
char check_f(helper<Type,&f> *);
//失败时展开这个
template<typename Type>
int check_f(...);
template<typename Type>
struct has_fun_f{
enum {value=sizeof(check_f<Type>(0))==sizeof(char)};
};
范例: has_fun_f<int (*)()>::value
配合macro,可把f替换为任一想确认的函数名称
code稍微改一下可用来确认class成员
作者:
PkmX
(阿猫)
2017-10-24 20:58:00
比较精确的说应该是你要判断函数有没有你想要的overload吧
作者:
kingofsdtw
(ä¸èƒ½é–’下來!!)
2017-10-24 21:00:00
cout ?
作者:
PkmX
(阿猫)
2017-10-24 21:01:00
C++17 + std::is_detected TS
http://coliru.stacked-crooked.com/a/4d2a330955c69554
用 C++20 concepts (目前gcc实做的语法和最终有点差异)
http://coliru.stacked-crooked.com/a/6811f025597528e9
楼主:
loveflames
(咕啾咕啾魔法阵)
2017-10-24 21:20:00
我很想知道有没有办法确认函数有无定义,却又能编译通过的方式目前我只知道constexpr函数特定情况下能用noexcept判断
作者:
PkmX
(阿猫)
2017-10-24 21:51:00
定义可能是在别的translation unit里面 除非到link时才知道
作者:
lovejomi
(JOMI)
2017-10-24 21:56:00
请问一下 check_f如果传入Type有找到,为啥会优先走helper为参数的版本?是什么规则吗另外一开始的f存在意义是什么?感觉可以拿掉?
作者:
PkmX
(阿猫)
2017-10-25 10:07:00
variadic argument在overload的rank最低如果helper<...>没有因为SFINAE被剃除的话 就会优先选择它f存在是举例用避免undeclared identifierloveflames: 突然想到你可以用weak function去判断吧
继续阅读
Re: [问题] token在这个上下文中所代表的意思
zzss2003
[问题] token在这个上下文中所代表的意思
zzss2003
[问题]关于MKL函式库一问
CannyRowFour
[问题] C++ 继承 object model layout 问题
gecer
[问题] GPGPU-sim 中 option_parser.cc
hakman
Re: [问题] 继承与聚合
holydc
[问题] 月经题,让外网连内网 网络实作让别人连
hpyhacking
[问题] LNK2019错误,但我没要他连结dll档
nimsbnims
[问题] 单一linked list node不用malloc
yamakazi
[问题] 继承与聚合
dwight90488
Links
booklink
Contact Us: admin [ a t ] ucptt.com