Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using binaries = std::vector<char>;
- class IClipboardReader
- {
- public:
- virtual binaries Read() const = 0;
- };
- class IClipboardWriter
- {
- public:
- virtual void Write(binaries bins) = 0;
- };
- class ClipboardSlot : public IClipboardReader, IClipboardWriter
- {
- public:
- binaries Read() const override
- {
- // ...
- return { 'a', 'b', 'c' };
- }
- void Write(binaries data) override
- {
- // ...
- }
- };
- template<typename CharType = char>
- std::basic_ostream<CharType>& operator<<( // vypisanie vectoru
- std::basic_ostream<CharType>& out,
- const std::vector<CharType>& value
- )
- {
- for (auto& c : value) out << c; return out;
- }
- void main()
- {
- auto slot = ClipboardSlot();
- IClipboardReader& upcasted1 = slot; // OK
- auto upcasted2 = (IClipboardReader&)slot; // Error: 'IClipboardReader': cannot instantiate abstract class
- auto upcasted3 = std::forward<const IClipboardReader&>(slot); // Error: 'IClipboardReader': cannot instantiate abstract class
- auto upcasted4 = static_cast<const IClipboardReader&>(slot); // Error: 'IClipboardReader': cannot instantiate abstract class
- auto slotPtr = std::make_shared<ClipboardSlot>();
- auto upcasted5 = static_cast<std::shared_ptr<IClipboardReader>>(slotPtr); // OK
- std::cout << "upcasted1:" << upcasted1.Read() << std::endl;
- std::cout << "upcasted2:" << upcasted2.Read() << std::endl;
- std::cout << "upcasted3:" << upcasted3.Read() << std::endl;
- std::cout << "upcasted4:" << upcasted4.Read() << std::endl;
- std::cout << "upcasted5:" << upcasted5->Read() << std::endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment