Hel*_*rld 0 c++ data-structures c++11
我有来自第三方库的两个结构,所以我不能改变它们的布局.但是我有两个我自己编写的结构符合它们的签名,所以我可以为它们添加函数(再次,但不是它们的布局,因此也没有虚函数).结构被称为Foo1和Foo2.两者都有相同的成员调用_b,但是在不同的偏移量.
struct FooBase { };
struct Foo1 : FooBase
{
int _a = 2;
int _b = 1;
};
struct Foo2 : FooBase
{
int _b = 2;
};
struct Wrap
{
Wrap(const FooBase& x) : _x(x) { }
FooBase& _x;
int GetValue() { return /* MISSING */; }
};
Run Code Online (Sandbox Code Playgroud)
我有一个名为的包装类Wrap.我正在寻找一种方法来返回_bfoo类中不使用虚函数的值,因为我不能再改变它们的大小了.
Foo1 f1 = Foo1();
Wrap x = f1;
int a = x.GetValue(); // should return 1
Foo2 f2 = Foo2();
Wrap y = f2;
int b = y.GetValue(); // should return 2
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我在评论中发布了一种方法,但对更好的解决方案感到好奇.
struct Wrap
{
Wrap(const Foo1& x) : _b(x._b) { }
Wrap(const Foo2& x) : _b(x._b) { }
int& _b;
int GetValue() { return _b; }
};
Run Code Online (Sandbox Code Playgroud)
除非需要类,否则可以使用函数模板来实现相同的效果.
template <typename Foo> int getValue(Foo const& foo)
{
return foo._b;
}
Run Code Online (Sandbox Code Playgroud)