একটি ওভারলোডেড ক্রিয়াকলাপ উভয় ফান্টারের মধ্যে নেওয়া উচিত, ল্যাম্বডা ধরণটি নির্ধারণযোগ্য (মাপের জন্য একটি std::function
(I'm ালাই যদি আমি ভুল হয়ে থাকি তবে দয়া করে)। সংজ্ঞায়িত? ( [&]() -> 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)>
এমন কোনও ল্যাম্বদা থেকেও নির্মিত যেতে পারে যা কিছু ফেরত দেয় (যার ফলে ফেরতের মান উপেক্ষা করা হয়)।