+
এক্সপ্রেশনে +[](){}
ইউনারী হয় +
অপারেটর। এটি [expr.unary.op] / 7 এ নিম্নলিখিত হিসাবে সংজ্ঞায়িত হয়েছে:
+
অ্যানারি অপারেটরের অপারেন্ডে পাটিগণিত, আনস্কোপড গণনা, বা পয়েন্টার টাইপ থাকবে এবং ফলাফলটি আর্গুমেন্টের মান।
ল্যাম্বদা পাটিগণিত ধরণের ইত্যাদি নয়, তবে এটি রূপান্তরিত হতে পারে:
[expr.prim.lambda] / 3
ধরণ ল্যামডা প্রকাশ [...] একটি অনন্য, নামহীন অ ইউনিয়ন শ্রেণী প্রকার - নামক অবসান টাইপ - যার বৈশিষ্ট্য নিচে বর্ণনা করা হয়।
[expr.prim.lambda] / 6
একটি জন্য অবসান টাইপ ল্যামডা প্রকাশ সঙ্গে ল্যামডা-ক্যাপচার টি public
অ- virtual
অ explicit
const
রূপান্তর ফাংশন পয়েন্টার ফাংশন অবসান ধরনের ফাংশন কল অপারেটর হিসাবে একই পরামিতি এবং বিনিময়ে ধরনের হচ্ছে। এই রূপান্তর ফাংশনটির মাধ্যমে ফিরে আসা মানটি কোনও ফাংশনের ঠিকানা হবে, যখন অনুরোধ করা হয়, ক্লোজার টাইপের ফাংশন কল অপারেটরকে অনুরোধ করার মতোই প্রভাব ফেলে।
অতএব, অ্যানারি +
ফাংশন পয়েন্টার ধরণের রূপান্তরকে বাধ্য করে, যা এই ল্যাম্বদার জন্য void (*)()
। সুতরাং, মত প্রকাশের ধরণটি +[](){}
হ'ল এই ফাংশন পয়েন্টার প্রকার void (*)()
।
দ্বিতীয় ওভারলোড void foo(void (*f)())
ওভারলোড রেজোলিউশনের জন্য র্যাঙ্কিংয়ের এক নির্ভুল ম্যাচে পরিণত হয় এবং তাই নির্বিঘ্নে বেছে নেওয়া হয় (প্রথম ওভারলোডটি কোনও সঠিক মিল নয়)।
ল্যাম্বডাকে অ-স্পষ্টত টেম্পলেট কর্টারের মাধ্যমে [](){}
রূপান্তর করা যেতে পারে , যা কোনও ধরণের প্রয়োজন এবং প্রয়োজনীয়তা পূরণ করে takesstd::function<void()>
std::function
Callable
CopyConstructible
ল্যাম্বদাটি ক্লোজার ধরণেরvoid (*)()
রূপান্তর ফাংশনের মাধ্যমেও রূপান্তরিত হতে পারে (উপরে দেখুন)।
উভয়ই ব্যবহারকারী-সংজ্ঞায়িত রূপান্তর ক্রম এবং একই র্যাঙ্কের। এজন্য অস্পষ্টতার কারণে প্রথম উদাহরণে ওভারলোড রেজোলিউশন ব্যর্থ হয় ।
ক্যাসিও নেেরির মতে, ড্যানিয়েল ক্রাগলারের একটি যুক্তির সমর্থিত, এই আনুষ্ঠানিক +
কৌশলটি নির্দিষ্ট আচরণ হিসাবে চিহ্নিত করা উচিত, অর্থাৎ আপনি এটির উপর নির্ভর করতে পারেন (মন্তব্যগুলিতে আলোচনা দেখুন)।
তবুও, যদি আপনি অস্পষ্টতা এড়াতে চান তবে আমি ফাংশন পয়েন্টার ধরণের একটি স্পষ্ট কাস্ট ব্যবহার করার পরামর্শ দেব: আপনাকে কী করতে হবে এবং কেন এটি কাজ করে তা জিজ্ঞাসা করার দরকার নেই;)
std::bind
কোনওstd::function
অবজেক্টের মাধ্যমে সদস্য ফাংশনকে বাঁধতে পারেন যা ফাংশন ল্যাভেলুতে অনুরূপ বলা যেতে পারে।