繁体   English   中英

如何避免 C++ header 仅库中的类/变量重新定义

[英]How to avoid class/variable redefinition in C++ header only libraries

我正在编写一个基于 OpenVPN3 的库,它是 header 中的 C++ OpenVPN 客户端实现,没有 cpp 文件。 因此,我不得不依赖只有一个 cpp 文件,即客户端本身,其中包括一个 header ,其中包含大量其他标头。

问题是,正因为如此,我无法将代码分成多个 cpp 文件。 我希望人们能够使用我的库,无论是预编译的还是由他们编译的,但是它们不能在超过 1 个 cpp 文件中包含相同的标头,或者在链接过程中会有很多重新定义。 例如,标题中还有一些 static 变量。

If someone want to take a look at the number of things added into the 'master' header file: https://github.com/lucaszanella/libopenvpn3/blob/9b3440a736d90b671e9376d2d9e4911475e07112/src/OpenVPNClient.hpp

我知道有一些像 Asio 这样的库也只有标头,每个人都可以毫无问题地使用它们。

一些不重新定义 class 或 function 的技术是转发声明它们但没有给出定义,但这里的问题是使用我的库的人将不得不访问它的方法和所有内容。 是否可以将我的方法与我的库在标题上使用的方法分开?

您可以将#pragma once放在文件的最顶部以避免由于被定义两次而导致相同的 class 冲突

如果不想重复导入,可以像 tadman 说的:在文件顶部

#ifndef HEADER
#define HEADER
//code goes here
#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM