私は次のような関数を持っています。一つのオブジェクト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