Skip to content

Commit 2d788b9

Browse files
committed
update static polymorphism
1 parent 3c868a0 commit 2d788b9

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

duckTyping.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
2+
#include <chrono>
3+
#include <iostream>
4+
5+
6+
auto start = std::chrono::steady_clock::now();
7+
8+
void writeElapsedTime()
9+
{
10+
auto now = std::chrono::steady_clock::now();
11+
std::chrono::duration<double> diff = now - start;
12+
std::cerr << diff.count() << " sec, elapsed: ";
13+
}
14+
15+
16+
struct MessageSeverty{
17+
void writeMessage() const
18+
{
19+
std::cerr << "unexpected" << '\n';
20+
}
21+
};
22+
23+
24+
struct MessageInformation
25+
{
26+
void writeMessage() const{
27+
std::cerr << "information" << '\n';
28+
}
29+
};
30+
31+
struct MessageWarning{
32+
void writeMessage() const{
33+
std::cerr << "warning" << '\n';
34+
}
35+
};
36+
37+
38+
struct MessageFatal:MessageSeverty{};
39+
40+
template<typename T>
41+
void writeMessage(T& messServer)
42+
{
43+
writeElapsedTime();
44+
messServer.writeMessage();
45+
}
46+
47+
int main()
48+
{
49+
std::cout << '\n';
50+
51+
MessageInformation messInfo;
52+
writeMessage(messInfo);
53+
54+
MessageWarning messWarn;
55+
writeMessage(messWarn);
56+
57+
MessageFatal messFatal;
58+
writeMessage(messFatal);
59+
60+
std::cout << '\n';
61+
62+
return 0;
63+
}

0 commit comments

Comments
 (0)