如何解决最终游戏引擎的纤维模板
#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<>
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。