如何解决使用 static_assert 确保实现 CRTP 方法
我正在使用 CTRP 在 C++ 中定义一个接口,如下所示:
template <typename T>
class Interface {
public:
inline void foo() { static_cast<T*>(this)->foo(); }
};
class Implementation : public Interface<Implementation> {
public:
void foo();
};
因此,如果这样使用接口:
template <typename T>
void interfaceUser(Interface<T>& i) {
i.foo();
}
这将最终调用实现的 foo() 方法。
然而,这个方法的缺陷(我想保留,因为接口和实现的方法名称是相同的),是如果实现没有实现该方法,代码仍然可以编译但会导致无限循环。
我的问题是,是否有某种方法可以使用 static_assert 来比较 Interface::foo 和 static_cast
另外,如果我的处理方式完全错误,请告诉我。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。