创建一个从Ellipsis(..)前进的STD ::向前的列表

create a list for std::forward from ellipsis (...)

本文关键字:列表 STD Ellipsis 一个 创建      更新时间:2023-10-16

i具有以下功能,它使用一个对象a构造另一个对象B,将B转发到另一种方法上。

代码:

static bool ExecuteScriptFunction(CScriptHost* pHost, const std::wstring& strFunctionName, MList* plResult, const MList* plArgs)
{   
    auto MakeV8 = [&](const MList* pList) -> Local<Value>
    {
        Local<Value> var;
        CreateJSObjectFromCPPObject(pHost->GetIsolate(), pList, var);
        return var;
    }
    Local<Value> value = pHost->InvokeFunction(strFunctionName.c_str(), MakeV8(plArgs));
    // Snip //
}

我想超载该函数,以便我可以将其通过可变数量的 plArgs传递以调用 - 我需要通过makev8进行警告。

为了实现这一目标,std ::前锋似乎是工作的可能工具,因为这意味着不依靠较少现代的va_*宏和通常更清洁的代码,并且还对STL的一部分学习了一些我以前没真正需要使用。

我认为这样的超载看起来如下,但是,我不确定我所写的内容,或者它是否实现了我的想法,或者它是否实现了任何实现!?

// call a javascript function in V8
template <class... Lists /* = MList*/>
static bool ExecuteScriptFunction(CScriptHost* pHost, const std::wstring& strFunctionName, MList* plResult, const Lists* ...args)
{   
    auto MakeV8 = [&](const MList* pList) -> Local<Value>
    {
        Local<Value> var;
        CreateJSObjectFromCPPObject(pHost->GetIsolate(), pList, var);
        return var;
    };
    // InvokeFunction handily already takes a variable list of Local<Value>s
    // I want to pass a ... of Local<Value>s that is generated from ...args     || || || || ||
    // So far, no squiggly red lines in VS 2015 on this line of code            / / / / /
    Local<Value> value = pHost->InvokeFunction(strFunctionName.c_str(), std::forward<Local<Value>>(MakeV8(args))...);
    // Snip //
}

以下代码行是否实现了我的要求? Local<Value> value = pHost->InvokeFunction(strFunctionName.c_str(), std::forward<Local<Value>>(MakeV8(args))...);

或其他咒语会产生我需要的行为?

您是否尝试过以下操作?

Local<Value> value = pHost->InvokeFunction(strFunctionName.c_str(), MakeV8(args)...);

仅当您的参数为T&&类型时,使用std::forward才使用,而您的指示器并非如此。搜索"完美的转发",以防您需要有关此的更多详细信息。

为了扩展variadic参数包, std::forward不是nequired的,因为函数参数列表已经是一个上下文,其中参数包被扩展。