C++中的模块编程
Posted
技术标签:
【中文标题】C++中的模块编程【英文标题】:Module programming in C++ 【发布时间】:2013-06-28 16:55:27 【问题描述】:我基本上是一名具有 C# 和 C++ 编程知识的 Java 程序员。考虑到这一点,请阅读以下场景,我用它来解释我的情况。
假设我正在创建一个程序。我是模块编程的粉丝,所以我把这个程序分成了模块。它们是:
-
报警
安全性
作家
现在,在 Java 中,我可以将这些模块表示为 packages
,其中 packages
是 Java 之外的简单文件夹。
现在,如果我要使用 C++,我该怎么做?我怎样才能将这些安排成packages
或类似Java的东西?而且,在我的真实案例中,我将使用 OpenCV C++ 库,同时将 C++/CLI 用于 GUI 和一些创建为 DLL 的 C# 模块。
我的程序将非常庞大和复杂,我不想看到所有类、DLL 和其他所有内容都位于同一个文件夹中而没有任何明确的安排。
更新
Image 我还有另一个模块叫做“Speak”。该模块将是 C++/CLI,因为 C# 和 C++ 都将在那里。我怎样才能把它安排到packages
?
【问题讨论】:
@DavidBrown:非常感谢您的回复。我做了一个小更新,请也回答这个问题。 【参考方案1】:至于如何组织硬盘上的文件,这完全由您决定。当你构建系统时,你必须确保编译器知道文件在哪里;与 Java 不同,C++ 编译器不会四处寻找并试图找出您可能打算做什么。
就逻辑组织而言,这里确实没有足够的信息来提出可靠的建议。但对于一大群相关类来说,命名空间可能是正确的选择。
【讨论】:
非常感谢您的回复。我做了一个小更新,请也回答这个问题。【参考方案2】:您可以在项目设置中设置源和二进制文件夹。 对于范围,您可以使用命名空间。命名空间非常适合防止名称冲突并为您的程序提供逻辑结构,但它不强制物理文件位置。 要强制执行物理文件结构,您可以在文件资源管理器中手动创建它,然后将这些文件添加到您的解决方案中。 但这里有个技巧:您可能想要包含任意文件夹中的文件,并且您不想总是提供完整地址或类似“....\Folder\file.h”的内容。相反,设置您的包含目录并在其中创建包含 - 每个头文件没有扩展名的文件,并在内部指定头文件的路径。从程序的其余部分,您可以简单地执行#include Myfile(“MyFile”周围应该有尖括号,但堆栈溢出解析器会隐藏它们)并且您可以从任何子文件夹中包含它。
【讨论】:
非常感谢您的回复。我做了一个小更新,请也回答这个问题。 您是将模块“Speak”作为库还是独立的控制台应用程序?在后一种情况下,您可能需要将它放在不同的项目中,但在相同的解决方案中。如果它是一个库,我仍然会使用另一个项目,但是您需要阅读有关如何“导出” dll 函数以便可以从外部访问它们的信息。以上是关于C++中的模块编程的主要内容,如果未能解决你的问题,请参考以下文章