c++ - 为什么在 SFINAE 中调用该函数并不模棱两可?
问题描述
我正在使用 SFINAE 检查某个类是否具有 'print()' 功能。代码有效,但为什么调用has_print()
不是模棱两可的?
class cls {
public:
void print() {
std::cout << "some text" << std::endl;
}
};
template<typename T>
auto has_print(T tt) -> decltype(T().print(), std::true_type()) {
tt.print();
return std::true_type();
}
std::false_type has_print(...) {
std::cout << "Doesn't contain print()" << std::endl;
return std::false_type();
}
int main() {
cls c;
has_print(c);
return 0;
}
它可以匹配他们两个。
解决方案
推荐阅读
- redis - Redis 流:组/消费者命名和清理
- javascript - 使用 Express.js 进行权限检查
- android - Unity Android - 反序列化 JSON 凭证数据时出错 - Google STT API
- pyspark - 我可以在删除旧分区后立即导入更新分区吗?
- distributed-tracing - 使用 W3C 跟踪上下文时如何从标头中找出跟踪范围之间的关系
- java - 单元测试:使用 Spock 或 Mockito 模拟 ThreadContext map impl
- javascript - 即使在代码中更改了元素,也无法在将其显示设置为无后重新显示元素
- python - 我不断收到此错误:TypeError: lemmatize() missing 1 required positional argument: 'word'
- cmake - 如何通过 CTest 的超时设置来测试二进制文件?
- java - 覆盖比较器和 Collections.sort