我有一個如下的函數,它使用一個對象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 //
}
我想重載函數,這樣我可以通過它的plArgs
變量傳遞到InvokeFunction - 與我需要通過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