template<class T> class User;
class UserInterface
{
public:
virtual void use() = 0;
virtual ~UserInterface() {}
};
template<class T> class User : public UserInterface
{
T data;
public:
User( T const& v) : data(v) {}
virtual void use()
{
std::cout << data << std::endl;
}
};
class Bar
{
UserInterface* owner;
public:
template<class T>
void setOwner(User<T>* o) { owner=o; }
void use() { owner->use(); }
};
int main()
{
User<float> f(0.123456f);
User<string> s( std::string("lol") );
Bar b;
b.setOwner(&f);
b.use();
b.setOwner(&s);
b.use();
}