에 대한 목록을 만듭니다. 하나의 객체 A를 사용하여 다른 객체 B를 생성하고 다른 메소드에 B를 전달하는 다음과 같은 함수가 있습니다.std :: forward 생략 부호 (...)
코드 :
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 //
}
내가 InvokeFunction에 전달할
plArgs
의 그것을 변수 양을 통과 할 수 있도록 기능을 과부하하고 싶습니다
- 나는 MakeV8 통해 수행에 필요한주의와 함께.
이렇게하려면 std :: forward가 덜 현대적인 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))...);
내가 필요한 동작을 일으킬 또 다른 주문이 있습니까?
예, 가능합니다. 둘째로,'std :: forward'의 사용은 절대적으로 아무 것도 유용하지 않습니다. 그리고 마지막으로 당신의 질문에서 결정적으로 빠진 것이 있습니다. 그것은 실제로 구체적이고 구체적인 질문 일 것입니다. "가능한가요?"라는 대답은 단순한 "예"인 예/아니오 질문 일뿐입니다. "너 나 가르쳐 줄 수있어?"는 질문이 아닙니다. stackoverflow.com은 튜토리얼 사이트가 아닙니다. 무엇보다 먼저 무엇을 묻고 있는지 정확하게 알아 내야합니다. –
@SamVarshavchik 나는 이것을 묻는 법을 분명히 알아야합니다. 내가 편집 할게. – mynameisnafe