考虑一个库中两个版本的类
在客户端代码中,我们拥有一个
Bar
:/// v1
class Bar
{
void get_drink()
{
std::cout << "non-const get_drink() called" << std::endl;
}
};
/// v2
class Bar
{
void get_drink()
{
std::cout << "non-const get_drink() called" << std::endl;
}
void get_drink() const
{
std::cout << "const get_drink() called" << std::endl;
}
};
在客户端代码中,我们拥有一个
Bar
对象并希望获取饮料。get_drink()
方法有const版本和非const版本,我希望在使用v2库时优先调用const版本,如果不可用则回退到非const版本(当使用v1库时)。即:Bar bar;
bar.get_drink(); // this does not call the const version of v2
static_cast<const Bar&>(bar).get_drink(); // this does not compile against v1 library
很不幸,该库没有版本号,也没有其他方法来区分两个版本。
我认为需要使用一些模板魔法。问题是如何实现呢?
const
的方法重命名为get_drink_const()
会被认为是作弊吗? :) - Jeremy Friesner#if(n)def
将两个版本包装起来,然后在任何给定的构建中针对你正在编译的版本进行#define
呢? - Remy Lebeau