小编Kyr*_*iet的帖子

lambda capture [&args...] 和 [...args = std::forward<Args>(args)] 之间有什么区别

我正在使用实体组件系统编写一个简单的游戏。我的组件之一是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)

c++ lambda templates variadic c++20

7
推荐指数
1
解决办法
172
查看次数

标签 统计

c++ ×1

c++20 ×1

lambda ×1

templates ×1

variadic ×1