c ++与旧库的兼容性

use*_*469 5 c++ struct

我有一个库1-1.h.

#include <1-1.h>;
Run Code Online (Sandbox Code Playgroud)

哪个有结构:

struct bucket { ... }
Run Code Online (Sandbox Code Playgroud)

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

是否有可能:

#ifndef bucket
    typedef bucket_t bucket;
#endif
Run Code Online (Sandbox Code Playgroud)

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

Cap*_*ous 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)