以使用的库版本为条件的函数声明?
Function declaration conditioned on a used library version?
我遇到以下问题:假设我正在使用库 Foo
,并且我在个人库中使用了一个函数 bar
。但是,在即将发布的版本中,bar
的函数定义将发生变化。例如,
bar(int first, int second, int third)
会变成
bar(int first, int newSecond, int second, int third)
在我的情况下保持向后兼容性将是有益的,所以我想知道是否可以根据库版本定义我的函数
我的原码:
int myFoo(int first, int second, int third){
auto something = bar(first, second, third);
....
}
新函数可能类似于
int myFoo(int first, int second, int third){
auto newSecond = X;
auto something = bar(first, newSecond, second, third);
....
}
在 python 我可以做类似
int myFoo(int first, int second, int third){
if Foo.version == "old":
auto something = bar(first, second, third);
else:
auto newSecond = X;
auto something = bar(first, newSecond, second, third);
....
}
但是我怎样才能在 C++ 中完成同样的事情呢?使用 #IF ...
行得通吗?我用 Google 搜索了一下,但结果并不是特别有用,因为我真的不知道要查找的正确术语(很高兴学习一些新术语)
有几种方法可以解决这个问题。
首先想到的是使用预处理器指令:
#define OLD_VERSION // Can be set in code or when you compile the code
int myFoo(int first, int second, int third){
#ifdef OLD_VERSION
auto something = bar(first, second, third);
#else
auto newSecond = X;
auto something = bar(first, newSecond, second, third);
....
#endif
}
或者,您可以包装 bar 函数并使用函数重载,根据您传入的参数,将调用适当的函数:
int myFoo(int first, int second, int third) { }
int myFoo(int first, int newSecond, int second, int third){ }
我遇到以下问题:假设我正在使用库 Foo
,并且我在个人库中使用了一个函数 bar
。但是,在即将发布的版本中,bar
的函数定义将发生变化。例如,
bar(int first, int second, int third)
会变成
bar(int first, int newSecond, int second, int third)
在我的情况下保持向后兼容性将是有益的,所以我想知道是否可以根据库版本定义我的函数
我的原码:
int myFoo(int first, int second, int third){
auto something = bar(first, second, third);
....
}
新函数可能类似于
int myFoo(int first, int second, int third){
auto newSecond = X;
auto something = bar(first, newSecond, second, third);
....
}
在 python 我可以做类似
int myFoo(int first, int second, int third){
if Foo.version == "old":
auto something = bar(first, second, third);
else:
auto newSecond = X;
auto something = bar(first, newSecond, second, third);
....
}
但是我怎样才能在 C++ 中完成同样的事情呢?使用 #IF ...
行得通吗?我用 Google 搜索了一下,但结果并不是特别有用,因为我真的不知道要查找的正确术语(很高兴学习一些新术语)
有几种方法可以解决这个问题。
首先想到的是使用预处理器指令:
#define OLD_VERSION // Can be set in code or when you compile the code
int myFoo(int first, int second, int third){
#ifdef OLD_VERSION
auto something = bar(first, second, third);
#else
auto newSecond = X;
auto something = bar(first, newSecond, second, third);
....
#endif
}
或者,您可以包装 bar 函数并使用函数重载,根据您传入的参数,将调用适当的函数:
int myFoo(int first, int second, int third) { }
int myFoo(int first, int newSecond, int second, int third){ }