#include <iostream>
#include <vector>
// 接口定义
class I
{
public:
virtual void dosome() = 0;
};
// 实现1
class A {
public:
void dosome()
{
std::cout << "A dosome()" << std::endl;
}
};
// 实现2
class B {
public:
void dosome()
{
std::cout << "B dosome()" << std::endl;
}
};
// 包装成统一接口的对象
template<typename T>
class warp_i: public I, private T
{
public:
warp_i(const T& t): T(t)
{
}
warp_i(T&& t) : T(t)
{
}
// 实现接口
virtual void dosome () override
{
return T::dosome();
}
};
// 包装成统一类型
class Imp
{
std::unique_ptr<I> _i; // 多态
public:
// 模板构造函数
template<typename T>
Imp(T& i) : _i(new warp_i<T>(i))
{
}
// 接口实现
void dosome()
{
_i->dosome();
}
};
int main(int argc, char** argv)
{
A a;
B b;
std::vector<Imp> v;
v.push_back(a);
v.push_back(b);
v[0].dosome();
v[1].dosome();
return 0;
}
/*
运行输出:
A dosome()
B dosome()
*/