|
1
1
有几种方法可以检测成员的存在,例如使用
但在模板之外,您仍然存在以下问题:
作为
因此,必须将函数包装到模板中:
|
|
|
2
0
是否有一个与外部联系的符号的定义的问题,本质上是一个问题,只能在连接时回答。在编译单个C++源文件时,编译器没有办法知道是否有其他外部函数的定义。在最好的情况下,SFINAE可以检查某个函数是否正确 . SFINAE不可能确定链接器以后是否会找到该函数的定义。 如果C库带有头,可以包含在C++中,并且只有在C库的特定版本定义它们时,才声明所涉及的函数,可以使用像JAROD42的回答中所描述的AQuooCH。 weak symbols 总是被定义的,例如:
弱符号不是标准C++的一部分,因此,要做到这一点的确切机制取决于编译器和平台。以上就是GCC的一个例子。MSVC有一个未记录的链接器标志
|
|
|
user1683586 · 使用复制构造函数启用_if 8 年前 |
|
|
ssb · C++SFINAE解析顺序 8 年前 |
|
|
Viatorus · SFINAE:函数模板优化 9 年前 |
|
|
Ammar Husain · 元编程的C++STL功能等价物 9 年前 |
|
|
KentH · 使用std::result_of的意外SFINAE失败 10 年前 |