Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;如何告诉开发人员在设计模板(如Java接口)时实现 我是C++新手,我有这个问题,因为我尝试比较C++和java。_C++_Generic Programming - Fatal编程技术网

C++;如何告诉开发人员在设计模板(如Java接口)时实现 我是C++新手,我有这个问题,因为我尝试比较C++和java。

C++;如何告诉开发人员在设计模板(如Java接口)时实现 我是C++新手,我有这个问题,因为我尝试比较C++和java。,c++,generic-programming,C++,Generic Programming,在Java中,interface告诉开发人员要实现哪个函数才能使用我提供的类或函数。例如,通过将参数类型指定为Runnable,我告诉开发人员我接受的参数需要一个run方法,Iterable告诉对象需要一个迭代器 在C++中,我学到的很多情况下,编译时需要一些操作符。有时我甚至不知道如何指定其他人传入的参数的要求 总结一下我的问题,在设计一个我希望能够处理更一般用法的模板时,该方法的总体思路是什么 P>我知道C++不是100%面向对象语言,所以我仍然试图适应它,当从java中移动时, AfA

在Java中,
interface
告诉开发人员要实现哪个函数才能使用我提供的类或函数。例如,通过将参数类型指定为
Runnable
,我告诉开发人员我接受的参数需要一个
run
方法,
Iterable
告诉对象需要一个迭代器

在C++中,我学到的很多情况下,编译时需要一些操作符。有时我甚至不知道如何指定其他人传入的参数的要求

总结一下我的问题,在设计一个我希望能够处理更一般用法的模板时,该方法的总体思路是什么


<> P>我知道C++不是100%面向对象语言,所以我仍然试图适应它,当从java中移动时,

AfAIK java接口是运行时多态性的;在C++中,它们是纯类,它们只包含纯虚方法。Java需要一个独立的语言实体,因为它只支持类的单一继承(这简化了许多情况),但允许接口的多重继承;因为C++一般允许对类进行完全多重继承,所以不需要这种区分。 OTHH,在C++中,几乎不使用接口——特别是在标准库中,尤其是容器部分。通常以模板的形式使用编译时多态性

不幸的是,到目前为止,还没有办法表达模板的类型参数应该提供什么操作;界面的模板等价物“概念”——正在由C++标准委员会工作——不幸的是,自从多年以来,它还没有准备好。p>
目前,您只能在文档中详细说明您的需求。如果传递给模板的类型不满足它们,您将得到一个编译错误,指向试图执行该类型不支持的操作的模板代码。这会导致相当多的混乱和可怕的错误消息,因此您可以尝试通过策略性地将所提供的类型检查放置在
static_assert
中来缓解这种情况,如果它符合您的需要,则可以在发生错误时提供更好的诊断

一个人永远不应该实施西斯。它们是黑暗面。这完全取决于您的需求和用例。例如,是否需要比较两个对象是否相等?然后创建并实现一个
操作符==
函数。如果您不需要比较是否相等,那么就不要为您的类型创建该运算符。您的意思可能是好的,但这样的问题将被标记为太宽而被关闭。相反,C++ C++ C++语言,我建议你不要通过比较java来学习C++,因为这两种语言有很大的不同,而不是从一个好的C++书籍中学习。也许你正在寻找概念,你可以用例如“我试着比较C++到java”。除了循环之类的一些琐碎语法。你可以通过auto->decltype()函数声明中的表达式实现一些模板参数所需的简单功能,对吗?@Shaggi:hmm我不明白你的意思,你能提供这样一个声明的示例吗?看一看,我想它表达了这样一个想法:啊,我明白了!是的,您可以使用类似的东西,但我担心通常这是不够的(想想如何在这样的表达式中强制执行
std::sort
的所有要求),或者返回值与类型所需的属性无关(再次思考
std::sort
)但它可能不会涵盖所有案例。