এখানে সি এর ফাংশন পয়েন্টারগুলির একটি সাধারণ ব্যবহার রয়েছে Fort আমি ফোরট্রানে একই জাতীয় কিছু করতে চাই। আমার কিছু ধারণা আছে তবে আমি জানতে চাই যে এটি করার কিছু যুক্তিযুক্ত উপায় আছে কিনা।
ব্যবহারকারীর দ্বারা পাস করা ফাংশন পয়েন্টার এবং প্রসঙ্গগুলি সংরক্ষণ করা হয়, তারপরে পরে বলা হয়।
typedef PetscErrorCode (*TSIFunction)(TS,PetscReal,Vec,Vec,Vec,void*);
PetscErrorCode TSSetIFunction(TS ts,Vec res,TSIFunction f,void *ctx);
ব্যবহারকারীর ফাংশনটি বিভিন্ন পরবর্তী সময়ে তাদের প্রসঙ্গ ব্যবহার করে ফিরে কল করা হয়।
পিইটিএসসি তে তারা স্ট্রিং -> ফাংশন পয়েন্টার টেবিলগুলিরও ভারী ব্যবহার করে। সবকিছুই একটি প্লাগইন, যাতে ব্যবহারকারী তাদের নিজস্ব প্রয়োগগুলি নিবন্ধন করতে পারেন এবং তারা প্রথম শ্রেণির।
#define PCGAMG "gamg"
PCRegisterDynamic(PCGAMG ,path,"PCCreate_GAMG",PCCreate_GAMG);
এটি তৈরির রুটিনটিকে "FList" তে নিবন্ধভুক্ত করে, তারপরে পিসিসেটফ্রোমপশনস () অন্য যে কোনও পছন্দের তুলনায় এই পদ্ধতিটি বেছে নেওয়ার ক্ষমতা সরবরাহ করে। যদি সিস্টেমটি গতিশীল লোডিং সমর্থন করে, আপনি পিসিসিআরটি_জিএএমজি প্রতীকের উপর সংকলন-সময় নির্ভরতা এড়িয়ে যেতে পারেন এবং কেবল ন্যূআলএল পাস করতে পারেন, তাহলে প্রতীকটি রান সময় শেয়ার করা লাইব্রেরিতে সন্ধান করা হবে।
মনে রাখবেন যে "ফ্যাক্টরি" এর বাইরে এই এক পদক্ষেপটি, এটি মার্টিন ফোলারকে "পরিষেবা লোকেটার" বলার সাথে মিল রেখে কন্ট্রোল ডিভাইসের একটি বিপর্যয়।
দ্রষ্টব্য: এটি আমার জেড ব্রাউনয়ের সাথে আমার ব্যক্তিগত চিঠিতে প্রকাশিত হয়েছিল, যেখানে তিনি আমাকে এই প্রশ্নটি করেছিলেন। আমি এটিকে আউটসোর্স করার সিদ্ধান্ত নিয়েছি এবং লোকেরা কী উত্তর পেতে পারে তা দেখুন see