c ++与旧库的兼容性

时间:2013-06-24 20:47:58

标签: c++ struct

我有一个图书馆1-1.h。

#include <1-1.h>;

其中有一个结构:

struct bucket { ... }

不幸的是,这个库是3方的,他们已经在1.2中将struct bucket更改为bucket_t {...}。我的所有代码都使用了bucket,但我也希望它与bucket_t兼容。

是否可以:

#ifndef bucket
    typedef bucket_t bucket;
#endif

(代码不起作用,但如果存在,我想将bucket设置为bucket_t。谢谢。

2 个答案:

答案 0 :(得分:3)

一个选项是在项目或makefile中添加自己的预定义符号,以指定您正在使用的版本。像LIBRARY1_1或LIBRARY1_2之类的东西。如果两者都未定义报告错误。您可以使用自己的包含文件,如下所示。

如果您使用的每个版本的头文件都不同......

<强> my1-1.h

#if defined( LIBRARY1_1 )
#include <1-1.h>
#elif defined( LIBRARY1_2 )
#include <1-2.h>
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif

如果每个版本的标题使用相同的文件名...

<强> my1-1.h

#include <1-1.h>
#if defined( LIBRARY1_1 )
#elif defined( LIBRARY1_2 )
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif

答案 1 :(得分:0)

预处理器或多或少地知道该语言。

我会选择以下内容。 在包含库的源文件中,或者写一个标题以避免重复自己。

#if USE_LIBRARY_1_1
#include <1-1.h>
#elif USE_LIBRARY_1_2
#include <1-2.h>
typedef bucket_t bucket
#endif