From 60cbbdec07ab7a5636eac5b3c024ae44e937f4d4 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 13 Dec 2021 00:07:19 +0800 Subject: +init --- .../StaticConstructorSample.cpp | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp (limited to 'Client/ThirdParty/StaticConstructor/StaticConstructorSample/StaticConstructorSample.cpp') 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 +#include + +// 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 +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 MyTemplateInt; +typedef MyTemplate 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"); + TestType("MyTemplateInt"); + TestType("MyTemplateDouble"); + + // Static Destructors will be called after exiting this function... + return 0; +} + + -- cgit v1.1-26-g67d0