एक अतिभारित फ़ंक्शन को दोनों फंक्शनलर्स को लेना चाहिए, यह देखते हुए कि लैम्ब्डा का प्रकार निर्णायक है (एक के लिए कास्टेबल है std::function
(कृपया मुझे गलत होने पर सही करें)। सवाल यह है: लैम्ब्डा स्पष्ट रूप से होने के बावजूद नीचे एक संकलित त्रुटि क्यों है। परिभाषित। ( [&]() -> Type {}
)
कृपया ध्यान दें, कि मेरे वर्तमान समाधान के लिए मुझे कैप्चर-बाय-रेफरेंस की आवश्यकता है, यही कारण है कि कोड में इसके लिए तर्क हैं।
निम्नलिखित उदाहरण समस्या का वर्णन करता है:
#include <iostream>
#include <string>
#include <functional>
void do_some(std::function<void(int)> thing)
{
thing(5);
}
void do_some(std::function<bool(int)> thing)
{
if (thing(10))
{
std::cout << "it's true!" << std::endl;
}
}
int main()
{
int local_to_be_modified = 0;
do_some(
[&](int in)
{
local_to_be_modified = in;
std::cout << "This is void-" << std::endl;
}
);
do_some(
[&](int in) -> bool
{
// error: call to 'do_some' is ambiguous
local_to_be_modified += in;
std::cout << "This is bool-" << std::endl;
return true;
}
);
}
std::function<void(int)>
एक लैम्ब्डा से भी निर्माण किया जा सकता है जो कुछ लौटाता है (जिसके कारण वापसी मान को अनदेखा किया जाता है)।