最终游戏引擎的纤维模板

问题描述

#pragma once
#include <Windows.h>
#include <functional>

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

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

大家好,长期潜伏者虽然这是我的第一个问题,因为我无法在互联网上的任何地方找到我正在寻找的东西。

我确信我想从代码本身做的事情有点明显。可以将任何类型的 std::function 指针作为类型的纤程类的模板。我正在尝试做一些类似于 Naughty Dog 在 2015 年 GDC 演讲中关于使用光纤保持多核、多线程系统在没有任何停机的情况下工作的内容,并且 id 在 Doom Eternal 上使用他们的 idTech 7 引擎所做的。虽然我自己几乎不指望这些结果,但我只是想看看我是否能做到。

反正我对模板编程不太熟悉。我通过 C 学习了编程,但还没有完全赶上 c++14,更不用说 c++20 和使用模板进行元编程了。我还在用 libClang 在我的构建管道中进行反射。

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

任何帮助,即使只是称我为白痴,也会非常有帮助和感激,在此先感谢您

解决方法

模板语法错误。如果您想向私有函数类型发送许多参数,则必须直接发送它们,而不是通过 Severity Code Description Project File Line Suppression State Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\GameState.h 11 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 9 Error C2660 'GameState::Update': function does not take 1 arguments sfml C:\Programowanie\Nauka\sfml\sfml\Game.cpp 52 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 9 Error C2504 'GameState': base class undefined sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 6 Error C2143 syntax error: missing ';' before '*' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 10 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 9 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 10 Error C2238 unexpected token(s) preceding ';' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 10 Error C2504 'GameState': base class undefined sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 6 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 9 Error C2143 syntax error: missing ';' before '*' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 10 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 10 Error C2238 unexpected token(s) preceding ';' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 10 Error C2143 syntax error: missing ';' before '*' sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C2238 unexpected token(s) preceding ';' sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C2504 'GameState': base class undefined sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 6 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 9 Error C2143 syntax error: missing ';' before '*' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 10 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 10 Error C2238 unexpected token(s) preceding ';' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 10 Error C2143 syntax error: missing ';' before '*' sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C2440 'return': cannot convert from 'Pause *' to 'GameState *' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.cpp 15 Error C2238 unexpected token(s) preceding ';' sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C2504 'GameState': base class undefined sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 6 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 9 Error C2143 syntax error: missing ';' before '*' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 10 Error C2238 unexpected token(s) preceding ';' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 10 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 10 Error C2143 syntax error: missing ';' before '*' sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C2238 unexpected token(s) preceding ';' sfml C:\Programowanie\Nauka\sfml\sfml\Game.h 11 Error C2440 'return': cannot convert from 'Menu *' to 'GameState *' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.cpp 14 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\GameState.h 11 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Pause.h 9 Error C2061 syntax error: identifier 'Game' sfml C:\Programowanie\Nauka\sfml\sfml\Menu.h 9 类型:

std::function

像这样使用它:

template<typename... Args>
struct dvTFiber {

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

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

auto fiber = dvTFiber<int,bool,float>{};

还有,

光纤类的模板,可以将任何类型的 std::function 指针作为类型

这段代码中没有指向 template<typename R,typename... Args> struct dvTFiber { private: std::function<R(Args...)> Run; }; 的指针,这段代码中只有简单的 std::function<>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...