c++ - SFINAE 检查失败
问题描述
以下 SFINAE 测试无法检查某物是否是鸭子(如果存在“void quack()”成员函数,则它是鸭子)。我不明白为什么。任何想法 ?
struct Duck
{
void quack() {}
};
struct Pig
{
void groink() {}
};
template<class T>
auto test_duck(const T& t, int)
-> decltype(t.quack(), bool())
{
return true;
}
template<class T>
auto test_duck(const T& t, long)
{
return false;
}
template<class T>
bool is_duck(const T& t)
{
return test_duck(t, 0);
}
int main()
{
Duck duck;
Pig pig;
cout << is_duck(duck) << endl;
cout << is_duck(pig) << endl;
}
解决方案
问题是您正在传递 aconst Duck&
但Duck
只有一个非常量quack()
方法。
编辑:看起来评论已经及时解决了。如果@PiotrSkotnicki 想发布答案(而不是在评论中回答),我将删除它。
推荐阅读
- linux - 在 x 毫秒内获取字符串中的值
- cytoscape.js - 如何使用 cytoscape.js 找到两个节点之间的所有路径?
- xmpp - Ejabberd api端点private_set不会保存数据
- python - 重新分配 Pandas DataFrame 列值
- flutter - 像 SliverAppBar 一样隐藏 TabBar
- exception - Feign 解码器未显示来自自定义异常的相关错误消息
- sorting - 如何通过 MUIDataTable 的主题覆盖来设置排序图标的颜色?
- arrays - 伪数组的自动热键变量表达式 - 将字符串转换为数字?
- javascript - 管理动态生成表的元素
- r - 无法在列表上写入。尝试了多种方法