c++ - 如何避免仅在 C++ 标头库中重新定义类/变量
问题描述
我正在编写一个基于 OpenVPN3 的库,它是 C++ OpenVPN 客户端实现,仅在标头中,没有 cpp 文件。因此,我不得不依赖只有一个 cpp 文件,即客户端本身,其中包含一个包含大量其他标头的标头。
问题是,正因为如此,我无法将代码分成多个 cpp 文件。我希望人们能够使用我的库,无论是由他们预编译还是编译,但它们不能在超过 1 个 cpp 文件中包含相同的头文件,或者在链接过程中会有很多重新定义。例如,标题中还有一些静态变量。
如果有人想查看添加到“主”头文件中的内容数量:https ://github.com/lucaszanella/libopenvpn3/blob/9b3440a736d90b671e9376d2d9e4911475e07112/src/OpenVPNClient.hpp
我知道有一些像 Asio 这样的库也只有标头,每个人都可以毫无问题地使用它们。
一些不重新定义类或函数的技术是转发声明它们但不给出定义,但这里的问题是使用我的库的人将不得不访问它的方法和所有内容。是否可以将我的方法与我的库在标题上使用的方法分开?
解决方案
您可以放在#pragma once
文件的最顶部以避免由于被定义两次而导致相同的类冲突
推荐阅读
- react-native - 如何在滚动视图中实现scrollToEnd函数反应原生
- java - 如何在 Java 11 中使用不受支持的语言环境和 String.format() 中的数字
- utf-8 - MacOS Big Sur:意外的差异行为
- maven - Maven 命令找不到任何测试
- ruby-on-rails - Rails/RSpec - 如何为处理程序编写 rspec 测试?
- postgresql - 服务器停止后 Postgres 数据仍在“使用中”
- rust - 枚举如何使用堆或堆栈类型处理其子类型?
- c# - 如何在 SQL 中插入 1M 模型
- ios - iOS 上的 Firebase Realtime:无法访问实时数据库
- javascript - 即使代码按预期运行,控制台错误,如何解决 undefined