首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于最终游戏引擎的纤维模板

用于最终游戏引擎的纤维模板
EN

Stack Overflow用户
提问于 2021-04-06 03:27:59
回答 1查看 52关注 0票数 0
代码语言:javascript
运行
复制
#pragma once
#include <Windows.h>
#include <functional>

template<std::function<typename ...Args>>
class dvTFiber {

private:
      std::function<Args... args> Run = nullptr;
};

大家好,长期潜伏的人,虽然这是我的第一个问题,因为我在互联网上找不到我正在寻找的东西。

我相信从代码本身我想要做的事情是显而易见的。fiber类的模板,可以接受任何类型的std::function<>指针作为类型。我正在尝试做一些类似于淘气狗在2015年全球数据中心演示中关于使用光纤来保持多核、多线程系统在没有任何停机时间的情况下工作的事情,以及id在末日永恒上使用他们的idTech 7引擎所做的事情。虽然我自己并不期望这样的结果,但我只是想看看我是否能做到。

无论如何,我对模板编程不是很熟悉。我是通过C语言学习编程的,但仍然没有完全掌握c++14,更不用说使用模板进行c++20和元编程了。见鬼,我还在使用libClang在构建管道中处理反射。

很抱歉给我上了历史课。长话短说,我想知道我正在尝试的是不是A)可能,B)容易可能,我只是想太多了,或者C)某种组合,我只是一个笨蛋

任何帮助,即使只是叫我笨蛋,都将是非常有帮助的,并在此之前感谢你。

EN

回答 1

Stack Overflow用户

发布于 2021-04-06 03:49:43

模板语法错误。如果要向私有函数类型发送许多参数,则必须直接发送它们,而不是通过std::function类型:

代码语言:javascript
运行
复制
template<typename... Args>
struct dvTFiber {

   // ...    
private:
    std::function<void(Args...)> Run; // by default is a null function.
};

并像这样使用它:

代码语言:javascript
运行
复制
auto fiber = dvTFiber<int, bool, float>{};

现在,如果您还想允许不同的返回类型,您也可以将其作为第一个参数发送:

代码语言:javascript
运行
复制
template<typename R, typename... Args>
struct dvTFiber {

private:
    std::function<R(Args...)> Run;
};

另外,

可以接受任何类型的std::function<>指针作为类型的纤程类的模板

这段代码中没有指向std::function<>的指针,只有普通的std::function

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66958681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档