द्वारा सी ++ लैम्ब्डा को इंस्टेंटेट करना मैं फ़ंक्शन से फ़ंक्शन बनाने का एक तरीका चाहता हूं। अब मैं लैम्ब्डा फ़ंक्शन द्वारा फ़ंक्शन कॉल को लपेटने की कोशिश करता हूं और बाद में इसे तुरंत चालू करता हूं। लेकिन लैम्ब्डा कन्स्ट्रक्टर की तुलना में संकलक कहता है। तो क्या इस कोड को संकलित करने का कोई तरीका है? या शायद इसके लिए एक और तरीका?इसके प्रकार
#include <iostream>
void func()
{
std::cout << "Hello";
}
auto t = []{ func(); };
typedef decltype(t) functor_type;
template <class F>
void functor_caller()
{
F f;
f();
}
int main()
{
functor_caller<functor_type>();
return 0;
}
अब मैं इस तरह के संकलक त्रुटि मिलती है: एक ही तरीका है मेरी राय में
error: use of deleted function '<lambda()>::<lambda>()'
error: a lambda closure type has a deleted default constructor
मैक्रो का उपयोग करने के लिए है:
#define WRAP_FUNC(f) \
struct f##_functor \
{ \
template <class... Args > \
auto operator()(Args ... args) ->decltype(f(args...)) \
{ \
return f(args...); \
} \
};
तो
WRAP_FUNC(func);
और उसके बाद (मुख्य में)
functor_caller<func_functor>()
मैं 'main' में 'functor_type' प्रकार का एक चर घोषित नहीं कर सकता। पहले काम करने के लिए इसे पाने की जरूरत है। – jxh
@ user315052: यह वास्तव में एक ही समस्या है। – Nawaz
क्या आपने 'एफ एफ (टी);'? वर्तमान में, 'functor_caller' को' t' के बारे में पता नहीं है। – MSalters