UE5 c++ 模板函数

类似C#的泛型函数

特点:

1 声明和实现必须都在头文件内进行,cpp只能调用

2 默认是inline

示例:

cpp 复制代码
//头文件内
public:	
	//定义
	template<typename T>
	T Avg(T first,T second);
	
//实现
template <typename T>
T AItem::Avg(T first, T second)
{
	return  ((first+second)/2 );
}

//源文件调用
FVector avgVector = Avg<FVector>(GetActorLocation(),FVector::ZeroVector);

限制数据类型

都要写在实现处

方法1 :使用断言

cpp 复制代码
template <typename T>
T AItem::Avg(T first, T second)
{
    // 限制:T 必须是指针类型
    static_assert(std::is_pointer_v<T>, "T 必须是指针!");
    return T();
}

方法2: c++17以上,使用requires关键字

cpp 复制代码
template <typename T>
requires std::is_arithmetic_v<T>  // 直接限制:只能是数字
T AItem::Avg(T a, T b)
{
    return (a + b) / 2;
}

方法3: UE引擎提供

cpp 复制代码
template <typename T>
T AItem::Avg(T a, T b)
{
    // T 必须是 AActor 或其子类
    static_assert(TIsDerivedFrom<T, AActor>::Value, "必须是Actor子类");
    return T();
}

常用的断言类型

cpp 复制代码
// 数字类型(int float double)
std::is_arithmetic_v<T>

// 指针类型
std::is_pointer_v<T>

// 空类型
std::is_void_v<T>

// 是 UObject 子类
TIsDerivedFrom<T, UObject>::Value

// 是 AActor 子类
TIsDerivedFrom<T, AActor>::Value

// 是 UActorComponent 子类
TIsDerivedFrom<T, UActorComponent>::Value
相关推荐
zc.z1 天前
JAVA实现:纯PCM格式音频转换成BASE64
java·音视频·pcm
mask哥1 天前
力扣算法java实现汇总整理(上)
java·算法·leetcode
Aaswk1 天前
Java Lambda 表达式与流处理
java·开发语言·python
是宇写的啊1 天前
Spring AOP
java·spring
万邦科技Lafite1 天前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
王老师青少年编程1 天前
csp信奥赛C++高频考点专项训练之字符串 --【子串查找】:[NOIP 2009 提高组] 潜伏者
c++·字符串·csp·高频考点·信奥赛·子串查找·潜伏者
初願致夕霞1 天前
基于系统调用的Linux网络编程——UDP与TCP
linux·网络·c++·tcp/ip·udp
Mr_pyx1 天前
Spring AI 入门教程:Java开发者的AI应用捷径
java·人工智能·spring
Zephyr_01 天前
Leedcode算法题
java·算法
苍煜1 天前
Java开发IO零基础吃透:BIO、NIO、同步异步、阻塞非阻塞
java·python·nio