我正在使用实体组件系统编写一个简单的游戏。我的组件之一是NativeScriptComponent. 它包含我的脚本的实例。我的想法是,我可以NativeScriptComponent随时创建我的Bind任何类实现Scriptable接口。之后我的游戏的 OnUpdate 函数将自动实例化游戏中的所有脚本并调用它们的 OnUpdate 函数。
我的脚本可以有自己的不同构造函数,因此在绑定脚本时我需要将所有参数转发给它们。
考虑以下代码:
#include <iostream>
#include <memory>
#include <functional>
using namespace std;
struct Scriptable
{
virtual void OnUpdate() {};
};
struct MyScript : Scriptable
{
MyScript(int n) : value(n) {}
void OnUpdate() override {cout << value;}
int value;
};
struct NativeScriptComponent
{
unique_ptr<Scriptable> Instance;
function<unique_ptr<Scriptable>()> Instantiate;
template<typename T, typename ... Args>
void Bind(Args&&... args)
{
// (A)
Instantiate = [&args...]() { return make_unique<T>(forward<Args>(args)...); };
// (B) since …Run Code Online (Sandbox Code Playgroud)