C++;如何告诉开发人员在设计模板(如Java接口)时实现 我是C++新手,我有这个问题,因为我尝试比较C++和java。
在Java中,C++;如何告诉开发人员在设计模板(如Java接口)时实现 我是C++新手,我有这个问题,因为我尝试比较C++和java。,c++,generic-programming,C++,Generic Programming,在Java中,interface告诉开发人员要实现哪个函数才能使用我提供的类或函数。例如,通过将参数类型指定为Runnable,我告诉开发人员我接受的参数需要一个run方法,Iterable告诉对象需要一个迭代器 在C++中,我学到的很多情况下,编译时需要一些操作符。有时我甚至不知道如何指定其他人传入的参数的要求 总结一下我的问题,在设计一个我希望能够处理更一般用法的模板时,该方法的总体思路是什么 P>我知道C++不是100%面向对象语言,所以我仍然试图适应它,当从java中移动时, AfA
interface
告诉开发人员要实现哪个函数才能使用我提供的类或函数。例如,通过将参数类型指定为Runnable
,我告诉开发人员我接受的参数需要一个run
方法,Iterable
告诉对象需要一个迭代器
在C++中,我学到的很多情况下,编译时需要一些操作符。有时我甚至不知道如何指定其他人传入的参数的要求
总结一下我的问题,在设计一个我希望能够处理更一般用法的模板时,该方法的总体思路是什么
<> P>我知道C++不是100%面向对象语言,所以我仍然试图适应它,当从java中移动时, AfAIK java接口是运行时多态性的;在C++中,它们是纯类,它们只包含纯虚方法。Java需要一个独立的语言实体,因为它只支持类的单一继承(这简化了许多情况),但允许接口的多重继承;因为C++一般允许对类进行完全多重继承,所以不需要这种区分。
目前,您只能在文档中详细说明您的需求。如果传递给模板的类型不满足它们,您将得到一个编译错误,指向试图执行该类型不支持的操作的模板代码。这会导致相当多的混乱和可怕的错误消息,因此您可以尝试通过策略性地将所提供的类型检查放置在
static_assert
中来缓解这种情况,如果它符合您的需要,则可以在发生错误时提供更好的诊断 一个人永远不应该实施西斯。它们是黑暗面。这完全取决于您的需求和用例。例如,是否需要比较两个对象是否相等?然后创建并实现一个操作符==
函数。如果您不需要比较是否相等,那么就不要为您的类型创建该运算符。您的意思可能是好的,但这样的问题将被标记为太宽而被关闭。相反,C++ C++ C++语言,我建议你不要通过比较java来学习C++,因为这两种语言有很大的不同,而不是从一个好的C++书籍中学习。也许你正在寻找概念,你可以用例如“我试着比较C++到java”。除了循环之类的一些琐碎语法。你可以通过auto->decltype()函数声明中的表达式实现一些模板参数所需的简单功能,对吗?@Shaggi:hmm我不明白你的意思,你能提供这样一个声明的示例吗?看一看,我想它表达了这样一个想法:啊,我明白了!是的,您可以使用类似的东西,但我担心通常这是不够的(想想如何在这样的表达式中强制执行std::sort
的所有要求),或者返回值与类型所需的属性无关(再次思考std::sort
)但它可能不会涵盖所有案例。