创建一个从Ellipsis(..)前进的STD ::向前的列表
create a list for std::forward from ellipsis (...)
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的,因为函数参数列表已经是一个上下文,其中参数包被扩展。
相关文章:
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- C++如何生成std::数组列表
- std::vector 没有重载函数的实例与参数列表匹配
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 将 std::thread by 值推送到列表中
- 转发变量参数列表以模拟 std::thread
- 使用大括号初始化 std::vector 使用初始值设定项列表
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- std::map, std::unordered_map - 缩小初始值设定项列表中的转换范围
- 如何按键对 std::对列表进行排序?
- 访问列表中的所有 std::变体,并为每次访问捕获附加值
- std::map与谓词与初始化列表
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 将初始化器列表/聚合初始化转发到 std::array 成员
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 为什么不能用两层列表初始值设定项初始化 2D std::array?
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- C 初始化列表std ::数组最佳性能
- 与内存堆有关的C 链接列表(STD ::列表)是否使用新的
- 类模板的参数列表“;std::vector”;缺少