C++如何告诉开发人员在设计模板(如Java接口)时实现某事
C++ how to tell developer to implement sth. when designing a template (like Java interface)
我是C++的新手,我有这个问题是因为我试图将C++与Java进行比较。
在Java中,interface
告诉开发人员要实现哪个函数,以便使用我提供的类或函数。例如,通过将参数类型指定为Runnable
,我告诉开发人员我接受的参数需要run
方法,Iterable
告诉对象需要迭代器。
在C++中,据我所知,我遇到过很多情况,在编译时,编译器需要一些运算符。有时我甚至不知道如何指定其他人传入的参数的要求
总结一下我的问题,在设计一个我希望能够处理更通用用法的模板时,方法的总体思路是什么?
我知道C++不是一种100%面向对象的语言,所以在从Java转换时,我仍在努力适应它。
AFAIK Java接口用于运行时多态性;在C++中,它们是只包含纯虚拟方法的普通类。Java需要一个单独的语言实体,因为它只支持类的单一继承(这简化了许多角落的情况(,但允许接口的多重继承;由于C++通常允许类的完全多重继承,因此没有必要进行这种区分。
OTOH,在C++中,你几乎不经常使用接口——尤其是在标准库中,尤其是在容器部分。通常以模板的形式使用编译时多态性。
不幸的是,到目前为止,还没有办法表达模板的类型参数应该提供什么操作;C++标准委员会正在开发与接口等效的模板"概念",但不幸的是,多年以来,它还没有准备好。
目前,您只能在文档中详细说明您的需求。如果传递给模板的类型不满足它们,您只会得到一个编译错误,指向试图执行该类型不支持的操作的模板代码。这会导致一些混乱和可怕的错误消息,因此您可以尝试通过战略性地将static_assert
放在所提供的类型中来缓解这种情况,检查它是否符合您的需求,从而在出现错误时提供更好的诊断。
- C++如何告诉开发人员在设计模板(如Java接口)时实现某事
- Java/C++加密和JNI接口
- Java(或C++)如何处理接口中定义的方法的调用
- C++中重叠的类似 Java 的接口
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- Java本机接口-C 不在等待Java功能完成
- OOP、"java-like" 和 "c++-like" 中的接口
- Java 本机接口 GetStringUTFChars 致命错误
- 继承Java集合接口(Set、Map、List等)的C++等价物是什么?或者扩展AbstractCollection
- C++对象的大小随着我添加更多接口而增加..Java能做到这一点吗
- 相当于C++中的 Java 接口
- 使用 Java 本机接口时出错
- 如何在C++中编写类java参数级接口实现
- 如何在C++或Java中管理大量接口
- 在C++中,我可以像在Java中一样拥有一个接口变量吗
- GotW建议不要使用公共虚拟函数,但是Java的接口呢?
- 我的Java GUI与我的超酷专有dll接口.如何防止第三方与此 dll 接口
- 安卓 :如何在.java文件和GSOAP之间接口
- C++:像在 Java 中一样将接口作为参数传递
- 是否可以使用 JNI 在 C 或 C++ 中实现 Java 接口