summaryrefslogtreecommitdiff
path: root/Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-12-13 00:07:19 +0800
committerchai <chaifix@163.com>2021-12-13 00:07:19 +0800
commit60cbbdec07ab7a5636eac5b3c024ae44e937f4d4 (patch)
treeb2c7b0a868f18159dbc43d8954e1bd7668549a88 /Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp
+init
Diffstat (limited to 'Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp')
-rw-r--r--Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp b/Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp
new file mode 100644
index 0000000..26ff046
--- /dev/null
+++ b/Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp
@@ -0,0 +1,76 @@
+// StaticConstructorSample.cpp : Defines the entry point for the console application.
+//
+#include "stdafx.h"
+#include <iostream>
+#include <string>
+
+// Sample Files:
+#include "MyClass.h"
+#include "MyTemplate.h"
+
+
+// Sample code for StartUp
+STATIC_STARTUP_CODE()
+{
+ std::cout << "Starting up..." << std::endl;
+}
+
+// Sample code for FinishUp
+STATIC_FINISHUP_CODE()
+{
+ std::cout << "Finishing up..." << std::endl;
+}
+
+
+// Template for testing each Type:
+template <typename Type>
+void TestType(const std::string& strType)
+{
+ using namespace std;
+
+ // Static Constructor should have been already invoked:
+ cout << "Show static data members before creating any instance of " << strType << ":" << endl;
+ cout << "String: " << Type::StaticStr() << endl;
+ cout << "PI: " << Type::PI() << endl;
+
+ // Temporary block:
+ // Destructor of local variable will be called at the end of this block.
+ {
+ Type myObj;
+ cout << "Show static data members after creating an instance of " << strType << ":" << endl;
+ cout << "String: " << myObj.StaticStr() << endl;
+ cout << "PI: " << myObj.PI() << endl;
+ }
+
+ cout << "Show static data members after destroying the instance of " << strType << ":" << endl;
+ cout << "String: " << Type::StaticStr() << endl;
+ cout << "PI: " << Type::PI() << endl;
+ cout << endl;
+}
+
+
+// Declaration of alias (class names) for the template instaces:
+typedef MyTemplate<int> MyTemplateInt;
+typedef MyTemplate<double> MyTemplateDouble;
+
+// Invoke the StaticConstructor & StaticDestructor for each one of the template instances:
+// Should be called with alias (class names) for the template instaces.
+INVOKE_STATIC_CONSTRUCTOR(MyTemplateInt);
+INVOKE_STATIC_CONSTRUCTOR(MyTemplateDouble);
+
+
+// Main:
+int _tmain(int argc, _TCHAR* argv[])
+{
+ // Static Constructors have already been called before entering this function...
+
+ // Run the same tests for each one of the classes:
+ TestType<MyClass>("MyClass");
+ TestType<MyTemplateInt>("MyTemplateInt");
+ TestType<MyTemplateDouble>("MyTemplateDouble");
+
+ // Static Destructors will be called after exiting this function...
+ return 0;
+}
+
+