সি ++ লাইব্রেরি এপিআই ডিজাইন


12

আমি সি ++ লাইব্রেরিগুলির জন্য ভাল এপিআই নকশা সম্পর্কে শেখার জন্য, ভাগ করা বস্তু / ডিএলএস ইত্যাদির দিকে নজর রাখার জন্য উত্স স্তরে চমৎকার এপিআই, সুন্দর শ্রেণি, টেম্পলেট এবং আরও অনেকগুলি লেখার জন্য অনেকগুলি সংস্থান আছে তবে এ সম্পর্কে সবেমাত্র কিছু নেই ভাগ করা libs এবং এক্সিকিউটেবলের মধ্যে জিনিস একসাথে রাখা। জন লাকোসের বড় আকারের সি ++ সফ্টওয়্যার ডিজাইনের মতো বই আকর্ষণীয় তবে ব্যাপকভাবে পুরানো but

আমি যা খুঁজছি তা হ'ল পরামর্শ হ'ল টেমপ্লেটগুলি পরিচালনা করা। আমার এপিআইতে টেমপ্লেটগুলি সহ আমি প্রায়শই আমার এক্সিকিউটেবল (বা অন্যান্য গ্রন্থাগার) -এর লাইব্রেরি কোডটি দিয়ে শেষ করি তাই আমি যদি সেখানে কোনও বাগ ঠিক করি তবে আমি কেবল নতুন লাইব্রেরিটি রোল আউট করতে পারব না তবে সেই কোডটির সমস্ত ক্লায়েন্টকে পুনরায় সংকলন এবং পুনরায় বিতরণ করতে হবে। (এবং হ্যাঁ, আমি লাইব্রেরির ভিতরে অন্তত সর্বাধিক সাধারণ সংস্করণ ইনস্ট্যান্ট করার চেষ্টা করার মতো কিছু সমাধান জানি))

আমি সি ++ লাইব্রেরিতে কাজ করার সময় বাইনারি সামঞ্জস্য রাখার জন্য অন্যান্য সতর্কতা ও জিনিসগুলিও মনে রাখছি।

এই জাতীয় জিনিসগুলির জন্য কোনও ভাল ওয়েবসাইট বা বই আছে?


আমি এটি এইভাবে পরিচালনা করেছি: sivut.koti.ason.fi/~terop/GameApi.html - যেমন লিবের অভ্যন্তরে টেমপ্লেট রয়েছে, এর কোনওটি এপিআইতে নেই ...
tp1

1
std::unique_ptrবেশ নতুন জিনিস। আপনার প্রস্তাবিত এপিআই সম্পর্কে আপনি কী ঠিক বেশি উপযুক্ত বলে মনে করেছিলেন? আপনি যে পদ্ধতিতে ম্যানুয়ালি সমস্ত সংস্থানগুলি পরিচালনা করতে হয়েছিল, কার্যত ফাঁস এবং ডাবল মোছার গ্যারান্টি দিয়েছিলেন, উদাহরণস্বরূপ? বা যেভাবে আপনার বেশিরভাগ ধরণের এক বা দুটি বর্ণের নাম ছিল, তাদের উদ্দেশ্য ভাগ করে নেওয়া অসম্ভব?
ডেড এমএমজি

1
@ টিপি 1: তবে আমি সেগুলি পরিচালনা করেছিলাম তা দেখার জন্য আপনি কোনও যত্ন নেন নি। আপনি এটি সম্পর্কে কিছুই না করে কেবল "হ্যান্ডল থেম" বলেছেন। আমি তাদের পরিচালনা করিনি এবং এখন কি? পরিবর্তে একটি RAII ক্লাস ব্যবহার করা উচিত যা এ জাতীয় ভুলের অনুমতি দেয় না। আপনি যদি ব্যবহার unique_ptrকরে থাকেন তবে এ জাতীয় কোড লেখা সম্ভব হত না।
ডেড এমএমজি

1
@ টিপি 1: আমি লক্ষ্য করেছি যে এনভটি ধ্বংস হতে পারে। যে প্রায় কাছাকাছি এটা. অবজেক্টগুলি পরিচালনা করার জন্য কোনও কার্যকারিতা বলে মনে হয় না। যদি আমি "আমি যা কিছু তৈরি করেছি তার সমস্ত কিছু" বা "কিছুই না" এর চেয়ে আরও ভাল দানযুক্ত মেমরি পরিচালনা করতে চাইতাম তবে মনে হবে যে আমি খারাপ হয়েছি।
ডেড এমজি

3
সফটওয়্যার ইঞ্জিনিয়ারিং চ্যাটে কোনও বর্ধিত কথোপকথনটি গ্রহণ করুন । কোন দরকারী তথ্য প্রশ্ন বা একটি উত্তর অন্তর্ভুক্ত করা যাবে?
ক্রিসএফ

উত্তর:


12

প্রকৃতপক্ষে একটি বই রয়েছে যা আপনি যা চেয়েছিলেন তা অবিকল। এটি কল, উপযুক্তভাবে যথেষ্ট, সি ++ এর জন্য এপিআই ডিজাইন। বইয়ের ওয়েবসাইটটিতে বইয়ের উত্স কোড এবং এরেটারও রয়েছে।


1
বইয়ের জন্য নির্ধারিত +1! আমি এটি পরামর্শ দিতে এসেছি কিন্তু আপনি আমাকে এটির কাছে মারলেন।
zxcdw

+1: আমি এই বইটি পড়া শেষ করছি এবং এটি একটি দুর্দান্ত উত্স। অত্যন্ত বাঞ্ছনীয়.
কর্চকিদু

3

এটি বেশ অসম্ভব। সরল সত্যটি হ'ল কখনও কখনও কোনও কাজ করার জন্য আপনার সংকলক প্রয়োজন এবং আপনি কেবল প্রয়োজনটি জাদু করতে পারেন না। এমন কোনও ফাংশন নেই যা std::vectorকেবল শিরোনামের পাঠাগার তৈরি করতে পারে না। সংকলকটি অনেকগুলি যাদুবিদ্যার কাজ করতে পারে, তবে এটি না চাওয়া ছাড়া আপনি এগুলি রাখতে পারবেন না এবং এটি জীবনের সত্য।

আপনি যা করতে পারেন তা এখানে: টেমপ্লেটগুলি যেখানে আপনার প্রয়োজন নেই সেগুলি ব্যবহার করবেন না। আপনি যা করতে পারবেন না তা এখানে: অন্য কিছু।

সাধারণ সত্যটি হ'ল নতুন সংস্করণটির সাথে সংশোধন করা কার্যত কর্মক্ষমতা, সুরক্ষা এবং কার্যকারিতার সুবিধার তুলনায় স্থিরভাবে টাইপ করা লাইব্রেরিগুলির তুলনায় ভারী বোঝা নয়।


2
আমি উদাহরণস্বরূপ চিন্তা করার জন্য উল্লেখ করেছি। আমি যা খুঁজছি তা হ'ল অন্যান্য অনুরূপ ইস্যুগুলির জন্য দিকনির্দেশনা এবং সেগুলি পরিচালনা করার জন্য সেরা অভ্যাসগুলি।
জোহানেস

ঠিক আছে, যদি এবিআই-সামঞ্জস্যতা ভঙ্গকারী সমস্ত নতুন সংস্করণটিকে একটি নতুন ইনলাইন-নেমস্পেসে স্থাপন করা হয় তবে এটি কেবলমাত্র শিরোনামের লাইব্রেরি কিনা তা বিবেচনা করে কী?
হস্তান্তরকারী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.