如何解决使用概念检查成员函数
我正在尝试使用概念检查给定类型是否具有成员函数,以实现 CRTP 接口。
以下代码编译:
template <typename T>
concept HasLoop = requires(T t) {
t.Loop();
};
template <HasLoop T>
void fn(T arg)
{
arg.Loop();
}
struct Obj
{
void Loop()
{
}
};
int main()
{
Obj o;
fn(o);
return 0;
}
但是这里不能编译:
template <typename T>
concept HasLoop = requires(T t) {
t.Loop();
};
template <HasLoop l>
struct StaticInf
{
void StartLoop(void* ptr)
{
static_cast<l*>(ptr)->Loop();
}
};
struct Obj : StaticInf<Obj>
{
void Loop()
{
}
};
int main(void)
{
Obj o;
return 0;
}
那么,问题是:为什么它使用模板函数而不是 CRTP 进行编译?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。