Static Function Libraries, Your Own Version of UE4 C++, No Engine Compile Times - Epic Wiki
# Static Function Libraries, Your Own Version of UE4 C++, No Engine Compile Times
(Redirected from Static Libraries, Your Own Version of UE4 C++, No Engine Compile Times)
# Contents
- 1 Overview
- 2 MyStaticLibrary.h
- 3 MyStaticLibrary.cpp
- 4 Example Usage
- 5 Include
- 6 Why UObject?
- 7 Related Tutorials
- 8 Summary
# Overview
Dear Community,
Building up your own static library of functions enables you to create your own version of UE4 C++ without having to modify the engine code and recompile it constantly.
A static library can have FORCEINLINE functions as well as .cpp functions that utilize your entire Game's compiled header structure!
Whenever you have a core function that you want to use in many classes, you can make it into a Static Library function so it can be used any time anywhere!
# MyStaticLibrary.h
#pragma once #include "MyStaticLibrary.generated.h" UCLASS() class UMyStaticLibrary : public UObject { GENERATED_UCLASS_BODY() //FORCEINLNE function static FORCEINLINE bool IsValid(AActor* TheActor) { if(!TheActor) return false; if(!TheActor->IsValidLowLevel()) return false; return true; } //cpp function static int32 ComplicatedGameDataAnalysis(); };
# MyStaticLibrary.cpp
// Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. #include "VictoryGame.h" ////////////////////////////////////////////////////////////////////////// // MyStaticLibrary UMyStaticLibrary::UMyStaticLibrary(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { } int32 UMyStaticLibrary::ComplicatedGameDataAnalysis() { //Do lots of stuff that requires the entire Game's compiled header source, // involving lots of your custom project-specific classes, // classes that have not been compiled in the .h of this library // since they depend on it. return 9000; }
# Example Usage
In any class, in the .h, or the .cpp, anywhere really (if the class depends on your static library
//Anywhere, in .h or .cpp, in any class! if(UMyStaticLibrary::IsValid(MyCharacter)) { //Celebrate ClientMessage( FString::FromInt(UMyStaticLibrary::ComplicatedGameDataAnalysis()) ); }
# Include
All of the classes that want to use your Static Library must include it
#include "MyStaticLibrary.h"
# Why UObject?
Because then you can also define USTRUCTS() in your static library, the very best place for them, if many classes want to use them!
# USTRUCT() Library
//My 2D Rectangle data type // because this is defined in your static library that all your classes depend on, // you can use this USTRUCT() data type in any class, even in .h FORCEINLINE functions! USTRUCT() struct FVRect { GENERATED_USTRUCT_BODY() UPROPERTY() FVector2D Min; UPROPERTY() FVector2D Max; //overloaded constructor FVRect(const FVector2D& VPoint1, const FVector2D& VPoint2) { //drag topleft to bottom right if(VPoint1.X < VPoint2.X && VPoint1.Y < VPoint2.Y ){ Min = VPoint1; Max = VPoint2; } //drag from bottom right to top left else if(VPoint1.X > VPoint2.X && VPoint1.Y > VPoint2.Y ){ Min = VPoint2; Max = VPoint1; } //drag from bottom left to top right else if(VPoint1.X < VPoint2.X && VPoint1.Y > VPoint2.Y ){ Min = FVector2D(VPoint1.X, VPoint2.Y); Max = FVector2D(VPoint2.X, VPoint1.Y); } //etc... } //base constructor FVRect() { Min = FVector2D(0,0); Max = FVector2D(500,500); } }; USTRUCT() struct FQuadVRect { GENERATED_USTRUCT_BODY() UPROPERTY() FVRect Rects[4]; //base constructor FQuadVRect() { } }; //And many //many //many //many more USTRUCTS() ! UCLASS() class UMyStaticLibrary : public UObject { GENERATED_UCLASS_BODY() };
# Related Tutorials
Linking Static Libraries Using The Build System
Great tutorial by Bob Gneu!
# Summary
Now you have an easy way to write your own version of UE4 C++ to include essential project-specific function tools,
without having to recompile the entire engine code constantly!
Enjoy!
Retrieved from "https://wiki.unrealengine.com/index.php?title=Static_Function_Libraries,_Your_Own_Version_of_UE4_C%2B%2B,_No_Engine_Compile_Times&oldid=23245"