Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <memory>
- #include <iostream>
- #include <cassert>
- #include <vector>
- #include <utility>
- class ITransport
- {
- public:
- virtual ~ITransport() = default;
- };
- using ITransportPtr = std::unique_ptr<ITransport>;
- class NetworkTransport : public ITransport
- {
- public:
- ~NetworkTransport() override = default;
- };
- class SerialTransport : public ITransport
- {
- public:
- ~SerialTransport() override = default;
- };
- class A
- {
- public:
- A()
- {
- add_transport<NetworkTransport>();
- add_transport<SerialTransport>();
- }
- int transport_count() { return m_transports.size(); }
- private:
- template <typename T>
- void add_transport()
- {
- auto tr = std::make_unique<T>();
- m_transports.push_back(std::move(tr));
- }
- private:
- std::vector<ITransportPtr> m_transports;
- };
- int main()
- {
- A a;
- std::cout << a.transport_count() << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement