উত্তর:
আপনি পয়েন্টার থেকে শনাক্তকারীটিকে অপসারণ ব্যতীত এর অনুরূপ বাক্য গঠন রয়েছে:
using FunctionPtr = void (*)();
এখানে একটি উদাহরণ
আপনি যদি "কুৎসিততা কেড়ে নিতে" চান, তবে জিওর পরামর্শ অনুসারে চেষ্টা করুন:
#include <type_traits>
using FunctionPtr = std::add_pointer<void()>::type;
এবং এখানে অন্য ডেমো ।
:(
using FunctionPtr = AddPointer<void()>;)
add_pointer<void()>::type: প্রস্তাবনাটি এখানে ব্যবহার করে: groups.google.com/a/isocpp.org/d/msg/std-proposals/xDQR3y5uTZ0/… আপনি লিখতে পারেন pointer<function<void>>।
আপনি যদি কোনও পয়েন্টারকে টাইপডেফিং-এড়িয়ে যান তবে "কদর্যতা" কেড়ে নেওয়া যেতে পারে:
void f() {}
using Function_t = void();
Function_t* ptr = f;
ptr();
*পরে ভুলে যাব এবং বিভ্রান্তিকর ত্রুটিগুলি পেয়ে যাব ।
আপনি একটি চান type-idযা আপনি মুছে ফেলা ব্যতীত মূলত ঘোষণার মতোই একই declarator-id। এটি declarator-idহ'ল একটি শনাক্তকারী এবং নামটি সমতুল্য ঘোষণায় আপনি ঘোষণা করছেন।
উদাহরণ স্বরূপ:
int x
declarator-idহয় xতাই ঠিক এটি অপসারণ:
int
অনুরূপভাবে:
int x[10]
সরান x:
int[10]
আপনার উদাহরণের জন্য:
void (*FunctionPtr)()
এখানে declarator-idহয় FunctionPtr। সুতরাং এটি পেতে কেবল এটি সরিয়ে দিন type-id:
void (*)()
এটি কাজ করে কারণ একটি প্রদত্ত type-idআপনি সর্বদা অনন্যভাবে নির্ধারণ করতে পারবেন কোথায় সনাক্তকারী কোনও ঘোষণা তৈরি করতে যায়। মান 8.1.1 থেকে:
[টাইপ-আইডি] এর অনন্যভাবে অবস্থানটি সনাক্ত করা সম্ভব যেখানে নির্ধারকটি [ঘোষণা] থাকলে সনাক্তকারী উপস্থিত হত। নামযুক্ত টাইপটি তখন অনুমানের শনাক্তকারীর ধরণের সমান।
স্পষ্টতার জন্য এই সিনট্যাক্স সম্পর্কে কীভাবে? (নোট ডাবল প্রথম বন্ধনী)
void func();
using FunctionPtr = decltype((func));
আর একটি পদ্ধতির পিছনে রিটার্ন টাইপের সাথে অটো রিটার্ন টাইপ ব্যবহার করা যেতে পারে।
using FunctionPtr = auto (*)(int*) -> void;
উপনামটি "অটো (*)" দিয়ে আরম্ভ করার পরে এটি কোনও ফাংশন পিটিআর হ'ল কিছু বলার পক্ষে যুক্তিযুক্ত সুবিধা রয়েছে এবং এটি সনাক্তকারী নাম দ্বারা অবিচ্ছিন্ন নয়।
তুলনা করা
typedef someStructureWithAWeirdName& (FunctionPtr*)(type1*, type2**, type3<type4&>);
সঙ্গে
using FunctionPtr = auto (*)(type1*, type2**, type3<type4&>) -> someStructureWithAWeirdName&;
দাবি অস্বীকার: আমি এটি বিন ডিনের "ইজিং ইন মডার্ন সি ++" টক থেকে নিয়েছি
usingসত্যই, বিশেষত কারণ ফাংশন পয়েন্টার শনাক্তকারীরা সাধারণত একটিtypedefবিবৃতিটির মাঝখানে থাকে এবং ব্যবহার করে সামনের দিকে চলে যায়using। অন্তত আমি যেখানে হারিয়েছি।