উত্তর:
আপনি পয়েন্টার থেকে শনাক্তকারীটিকে অপসারণ ব্যতীত এর অনুরূপ বাক্য গঠন রয়েছে:
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
। অন্তত আমি যেখানে হারিয়েছি।