كيف يمكن لدعوة std :: إعادة التوجيه على جميع الحجج في وظيفة variadic؟
-
26-09-2019 - |
سؤال
كنت فقط أكتب مصنع كائن عام وأستخدم مكتبة Meta-Prevrocessor Preprocessor لإنشاء قالب متغير (باستخدام عام 2010 ولا يدعمها). تستخدم وظيفتي مراجع RVAL و std::forward
للقيام بإعادة توجيه مثالية وجعلني أفكر ... عندما يخرج C ++ 0x وكان لدي برنامج مترجم قياسي سأفعل ذلك باستخدام قوالب متغيرة حقيقية. كيف سأتصل رغم ذلك std::forward
على الحجج؟
template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
y(std::forward(...params)); //? - I doubt this would work.
}
إن الطريقة الوحيدة التي يمكنني التفكير بها تتطلب تفريغًا يدويًا ... معارف ولست هناك بعد. هل هناك بناء جملة أسرع من شأنه أن يعمل؟
المحلول
كنت ستفعل:
template <typename ...Params>
void f(Params&&... params)
{
y(std::forward<Params>(params)...);
}
ال ...
يقول إلى حد كبير "خذ ما هو على اليسار ، ولكل معلمة قالب ، قم بفكها وفقًا لذلك."
لا تنتمي إلى StackOverflow