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
相关推荐
zfoo-framework14 分钟前
1.ansible安装 2.虚拟机克隆
java
码上解惑24 分钟前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
hold?fish:palm1 小时前
9 找到字符串中所有字母异位词
c++·算法·leetcode
青山木1 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
Duo1J2 小时前
【UE】Slate 编辑器工具开发03 - 节点编辑器 (EdGraph)
ue5·编辑器·游戏引擎·ue4
程序员-珍2 小时前
报错下载android sdk失败
android·java
糖果店的幽灵2 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
吃饱了得干活2 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
啦啦啦啦啦zzzz2 小时前
算法:回溯算法
c++·算法·leetcode
Lzg_na2 小时前
订阅发布模块事例
c++