Динамический полиморфизм
#include <iostream>
class IStream {
public:
virtual ~IStream() = default;
virtual void foo() = 0;
};
class Stream : public IStream {
public:
void foo() override {
std::cout << "Stream::foo" << std::endl;
}
};
int main() {
IStream* stream = new Stream;
stream->foo();
return 0;
}
Статический полиморфизм
#include <iostream>
template<typename Stream>
class IStream : public Stream {
public:
inline void foo() {
return static_cast<Stream*>(this)->foo();
}
};
class Stream {
private:
friend class IStream<Stream>;
inline void foo() {
std::cout << "Stream::foo" << std::endl;
}
};
int main() {
IStream<Stream> stream;
stream.foo();
return 0;
}
Комментариев нет:
Отправить комментарий