বুস্টের সর্বাধিক ব্যবহৃত অংশগুলি [বন্ধ]


115

যখন আবিষ্কার boost::lexical_castকরলাম আমি নিজেকে ভেবেছিলাম "কেন আমি এই বিষয়ে খুব তাড়াতাড়ি জানি না!" - আমি কোড লিখতে পছন্দ করি না

stringstream ss;
ss << anIntVal;
mystring = ss.str();

এখন লিখি

mystring = boost::lexical_cast<string>(anIntVal);

গতকাল, স্ট্যাকওভারফ্লোতে, আমি উত্সাহ বিভাজন জুড়ে এসেছি (অন্য রত্ন যা আমাকে কোড লেখার জন্য সংরক্ষণ করবে)।

string stringtobesplit = "AA/BB-CC")
vector<string> tokens;

boost::split(tokens, stringtobesplit, boost::is_any_of("/-")); 
// tokens now holds 3 items: AA BB CC

আমি নিয়মিতভাবে ব্যবহার করতে সক্ষম হবো এমন অন্যান্য ক্রিয়াগুলি সন্ধানের জন্য বুস্ট ডকুমেন্টেশনের মাধ্যমে সন্ধান করতে যাচ্ছি, তবে আমি মনে করি যে জিনিসগুলি মিস করা খুব সহজ হবে।

আপনি কোন বুস্ট ফাংশনগুলি ব্যবহার করেন / সবচেয়ে বেশি ঘৃণা করবেন?


1
আগ্রহের বাইরে, আপনি বুস্টটি ব্যবহার করার আগে আপনার নিজের "কনভার্ট নম্বরকে স্ট্রিংয়ে রূপান্তর" ফাংশন লিখতে থামিয়েছেন? আমি সদৃশটি দেখেছি এবং একটি সাধারণ টেমপ্লেট লিখেছি এবং এটি ব্যবহার করেছি এবং সম্ভবত যখন এটি পেয়েছিলাম তখন বুস্ট সংস্করণে স্যুইচ করেছি ...
লেন হোলগেট

4
হাই লেন, বিভিন্ন প্রকল্পে বিভিন্ন সময়ে আমি একটি টম্পলেটযুক্ত "টোস্টর" ফাংশন লিখেছি, তবে তারপরে আমি অন্য কোনও প্রকল্পে চলে যাব, তারপরে 3-লাইনার লেখার কাজটি শেষ করলাম কারণ আমি কেবল রঙিন কাজটি করতে চাইছিলাম: - ) "মিসকাফানস" ফাইল তৈরির ওভারহেডের বিপরীতে
hamishmcn

উত্তর:


62

সম্ভবত আমার পক্ষে বুস্টের সর্বাধিক ব্যবহৃত অংশটি হ'ল বুস্ট :: শেয়ারড_পিটার


13
এছাড়াও সম্ভবত সবচেয়ে বেশি ব্যবহৃত। রেফারেন্স, পয়েন্টার পাত্রে এবং অটো_সিপিআর দ্বারা শেয়ারড_প্টরের বেশিরভাগ ব্যবহারগুলি রিফ্যাক্টর করে আমি নিজে হার্ড পাঠটি শিখেছি। আমি এখন বেশিরভাগ ক্ষেত্রেই এটির সাথে
amit

1
@ ফায়েদরাস: আপডেট হওয়া লিঙ্ক: blogea.b Bureau14.fr/index.php/2009/08/…
ম্যাথিউডি

4
সি ++ 11 এ আর প্রাসঙ্গিক নয় যা আছে std::shared_ptrএবং std::unique_ptr
einpoklum

49

BOOST_FOREach জীবনকে আবার সার্থক করে তোলে।

(কেন কেউ এটি উল্লেখ করেননি? প্রশ্নটি 8 মাস আগে জিজ্ঞাসা করা হয়েছিল!)


15
"শর্তাধীন প্রেম" এর উপর এরিক নিবলারের নিবন্ধ ( artima.com/cppsource/foreach.html ) BOOST_FOREach কীভাবে কাজ করে তা বর্ণনা করে। এটা বেশ পাগল।
জেফ হার্ডি

2
সি ++ 11 এবং
ল্যাম্বডাসের

34

আমার ফলসগুলি কোনও নির্দিষ্ট ক্রমে নয়:

  • Regex
  • নথি ব্যবস্থা
  • সুতা
  • lexical_cast
  • প্রোগ্রাম_পশন (কেবল উজ্জ্বল!)
  • পরীক্ষা (আমার সমস্ত ইউনিট পরীক্ষার প্রয়োজনের জন্য)।
  • স্ট্রিং অ্যালগরিদম
  • স্ট্রিং টোকেনাইজার
  • ফর্ম্যাট (টাইপ-সেফ প্রিন্টফ স্টাইল স্ট্রিং ফর্ম্যাটিং)
  • স্মার্ট ptrs

আমি যখন আমার প্রথম ক্রস-প্ল্যাটফর্ম অ্যাপটি লিখেছিলাম তখন বুস্ট একটি বিশাল সহায়তা ছিল - এটি না করে আমি সত্যিই লড়াই করতে পারতাম।


4
দয়া করে সি ++ 11 / সি ++ 14 এর জন্য আপডেট করুন ...
einpoklum

28

আমি পছন্দ করি আপনি কীভাবে আপনার নিজের ডেস্ট্রাক্টর সরবরাহ করতে পারেন shared_ptr
এর অর্থ, উদাহরণস্বরূপ, আপনি এটির সাথে এটি ব্যবহার করতে পারেন FILE*এবং এটি আপনার জন্য ফাইলটি বন্ধ করতে পেতে পারেন।
যেমন

void safeclose(FILE*fp) {
    if(fp) {
        fclose(fp);
    }
}
void some_fn() {
    boost::shared_ptr<FILE> fp( fopen(myfilename, "a+t"), safeclose );
    //body of the function, and when ever it exits the file gets closed
    fprintf( fp.get(), "a message\n" );
}

1
আমি জানি এটি প্রায় দুই বছর পরে, কিন্তু ... যে অ্যাসাইনমেন্টটি NULLঅকেজো, কারণ এটি স্থানীয় ফাংশন প্যারামিটার বরাদ্দ করে। :)
Xeo

1
ধন্যবাদ @ শিও, আমি এটিকে সরিয়ে দিয়েছি
hamishmcn

22

মাল্টি-ইনডেক্স কনটেইনারগুলি কেউ উল্লেখ করেনি তাই আমি দেরীতে চিমে। এটি প্রায়শই যে আপনার তাদের প্রয়োজন হয় না তা নয়, তবে উত্সাহ ছাড়া এটি একটি সমতুল্য ডেটা স্ট্রাকচার তৈরি করার পাশাপাশি কম দক্ষ হওয়াও সত্যিকারের ব্যথা। আমি সম্প্রতি 2 টি কী সন্ধানকারী পাত্রে তৈরি করতে তাদের প্রচুর ব্যবহার করছি।


20

আমি অবাক যে কেউ উল্লেখ করেনি boost::optional। আমি ছাড়া বুস্ট কোন অংশ চেয়ে বেশি ঘন ঘন এটি ব্যবহার নিজেকে খুঁজে shared_ptrএবং scoped_ptr


1
এখন হিসাবে std::experimental::optionalএবং শীঘ্রই (সি ++ 17?) হিসাবে উপলব্ধ std::optional
einpoklum

1
হ্যাঁ, এবং আমি এটি সম্পর্কে খুব খুশি। :-) যদিও আমি ব্যবহার করি সমস্ত সংকলকগুলিতে মান এবং তাদের সম্পূর্ণ বাস্তবায়নের মধ্যে বিলম্বের বিষয়টি বিবেচনা করলেও, এটির উপর নির্ভর করার আগে এখনও কিছুটা সময় হয়ে যাবে ... আমি কেবলমাত্র C ++ 11 ব্যবহার শুরু করতে সক্ষম হয়েছি গত বছর একটি প্রকল্প :-(
হেড গিক

আসলে আমি মনে করি বেশিরভাগ সংকলকগুলি সাম্প্রতিক বছরগুলিতে ঠিক মিষ্টির মানদণ্ড - জিসিসি এবং ঝনঝনিকে সি ++ 14 সমর্থন করেছিল যখন এটি প্রকাশ হয়েছিল, তাই না? যাইহোক, দয়া করে আপনার মন্তব্যে আপনার উত্তরের সাথে সংহত করার বিষয়টি বিবেচনা করুন।
einpoklum

@ হেইডজিক 8 বছর পরে আপনার উত্তরে নতুন মন্তব্য যুক্ত হওয়া দেখতে আকর্ষণীয়, এবং আপনি প্রতিক্রিয়া জানিয়েছেন!
Deqing

বাহ ... আমি অনুমান এটা করেছে আট বছর ধরে। কেরিমিট ব্যাঙ যেমন বলেছে, যখন আপনি উড়ে বেড়াচ্ছেন তখন সময়ের মজা। ;-)
হেড গীক


11

BOOST_STATIC_ASSERT

আপডেট (অক্টোবর ২০১১): সি ++ 11 (সি ++ 0 এক্স) এর static_assert http://www2.research.att.com/~bs/C++0xFAQ.html#static_assert রয়েছে


5
BOOST_MPL_ASSERT_MSG BOOST_STATIC_ASSERT যে আকারের অসম্পূর্ণ প্রকারের বার্তা দেয় তার চেয়ে অনেক বেশি তথ্যবহুল ত্রুটিগুলি পড়ার / স্পট পড়ার অনুমতি দেয়।
কিটসুনওয়াইএমজি

এখানে এখানে! আমি এই পরীক্ষার ম্যাক্রো BOOST_CHECK_CLOSE এর মধ্যে একটি অপূর্ণ প্রকারের ত্রুটিটি পেয়েছি half আমাকে আধা দিন সময় লেগেছে যে আমি কী ডেকে আছি তার আগে আমি এটি (ইনট, ইনট, ফ্লোট) দিয়ে ডাকছি; আমি একবার পূর্ণসংখ্যাটি ভাসমান স্থানে ফেললে ত্রুটিটি চলে গেল। তবে একটি অসম্পূর্ণ প্রকারের সাথে কী করতে হবে তা আমি সত্যিই জানি না :)
জেমি কুক

9

আমার অন্যতম ব্যবহৃত বুস্ট যথাযথ নয়, তবে বুস্টের শীর্ষে নির্মিত অ্যাডোব সোর্স লাইব্রেরি (এএসএল) - বিশেষত, স্ট্যান্ডার্ড আলগোরিদিমগুলির এক্সটেনশানগুলি যা পৃথক শুরু / শেষ পুনরাবৃত্তির পরিবর্তে বস্ট :: রেঞ্জ গ্রহণ করে। তারপরে ফোন করার পরিবর্তে, বলুন,

std::for_each(some_container.begin(), some_container.end(), do_something());

আমি কেবল বলতে পারি

adobe::for_each(some_container, do_something());

(আমি আশা করি এএসএলের এই অংশগুলি শেষ পর্যন্ত বুস্টে স্থানান্তরিত হবে))


আমি এটি পছন্দ করি, আমি ASL
hamishmcn

8

আমি প্রচুর ব্যবহার:

  • বুস্ট :: সংকেত
  • বুস্ট :: shared_ptr
  • বুস্ট :: lexical_cast
  • বুস্ট :: বেঁধে
  • বুস্ট :: র্যান্ডম
  • বুস্ট :: থ্রেড
  • বুস্ট :: noncopyable

টুপল, স্ট্যাটিক অ্যাসেট এবং ইন্টিজারের মতো অন্যান্য যদি আপনি কোনও লাইব্রেরি লিখতে থাকেন যা বিভিন্ন প্ল্যাটফর্মগুলিতে ব্যবহার করার কারণে useful

গ্রাফ এবং ল্যাম্বদার মতো বিষয়গুলি আরও নির্দিষ্ট।


সি ++ 11/14-এর এই দিনগুলির জন্য আপডেট করুন (বা উত্তরটি সরিয়ে দেওয়ার বিষয়ে বিবেচনা করুন)।
einpoklum

8

boost::shared_ptrআধুনিক সি ++ প্রোগ্রামিং আইএমএইচওর জন্য প্রয়োজনীয়তা। এ কারণেই তারা এটি টিআর 1 এর সাথে মানকে যুক্ত করেছে। boost::program_options, boost::bindএবং boost::signalআপনি কীভাবে তাদের কীভাবে ব্যবহার করতে হয় তা যদি জানেন এবং সত্যিই দুর্দান্ত হন। শেষ দুটি যদিও নতুনদের ভীতি প্রদর্শন করে।


7

ECMAScript পার্স করার ব্যবসায়ের সমাধানের জন্য আমরা বুস্ট :: স্পিরিটটি বেশ কার্যকর বলে মনে করেছি। জটিল, তবে খুব সুন্দর!



7

আমি বহু বছর ধরে শেয়ারড_পিটার ব্যবহার করছি। এটি কেবল এতটাই কার্যকর, কোনও প্রকল্প ছাড়াই হওয়া উচিত এমন কোনও কারণ নেই।

তার উপরে, আমি জেনেরিক কলব্যাক প্রক্রিয়াগুলির জন্য বাইন্ড / ফাংশন / ল্যাম্বদাও ব্যবহার করি - বিশেষত পরীক্ষার সময় দরকারী - পাশাপাশি আমার সাধারণ-উদ্দেশ্যে স্প্রিন্ট প্রতিস্থাপনের জন্য ফর্ম্যাট।

অবশেষে, অন্য দিনটি যখন আমি সমস্যা সমাধানের জন্য ক্রোধে ভেরিয়েন্ট ব্যবহার করি (এমন একটি পার্সার যা কোনও ছোট সম্পর্কযুক্ত সম্পর্কযুক্ত টোকেন ধরণের সেট দিয়ে প্রতিক্রিয়া জানাতে পারে)। সমাধানটি খুব মার্জিত ছিল এবং আমি এটিতে খুব খুশি।


বছর কেটে গেছে এবং সময় পরিবর্তিত হয়েছে, তাই একটি আপডেটের জন্য সময়। SharedPtr এবং ফাংশন এখন স্ট্যান্ডার্ডের অংশ এবং বাইন্ড এবং ল্যাম্বদা প্রকৃত ভাষা-স্তরের ল্যাম্বদা কার্যকারিতা দ্বারা অপ্রচলিত।

আমি এখনও ভেরিয়েন্ট ব্যবহার করি (যা মানকও করা হয়েছে, তবে আমি এখনও সেখানে নেই), ফর্ম্যাটটি মূলত এফএমটিলিব দ্বারা প্রতিস্থাপিত হয়েছে (যা মানকও করা হয়েছে)।

আমি বুস্টের যে বড় অংশটি ব্যবহার করি তা হ'ল বুস্ট.এসিও। যা মানক হওয়ার প্রক্রিয়াধীন রয়েছে।


1
আমি উপরের সকলের সাথে একমত - লাম্বদা বাদে। আমি এটি কিছুক্ষণ ব্যবহার করেছি, তবে এটি এতটাই মারাত্মক যে আমি এটিকে সহজতম অভিব্যক্তি বাদ দিয়ে ছেড়ে দিয়েছি। আগ্রহীভাবে C ++ 0x এবং এর ল্যাম্বদা এক্সপ্রেশনগুলির ফর্মটির জন্য অপেক্ষা করছি।
হেড গিক

আমি সম্মত হই যে বুস্ট.লাম্বদা সমস্ত ধরণের সমস্যায় পূর্ণ - আমি উলাম্বদা বা সুরক্ষিত অঞ্চলে প্রবেশের সাথে সাথেই আমি তা ছেড়ে দেব এবং এটি পুরানো উপায়ে করব, তবে কোনও অর্ধ-শালীন উপায়ে কলব্যাকগুলি প্রসারিত করার জন্য এটি প্রয়োজনীয় বলে মনে হচ্ছে । এটি বলেছিল, আমিও সি ++ 0 এক্স বাস্তবায়নের জন্য অপেক্ষা করছি।
কাজড ড্রাগন

6

এই যেমন একটি মানচিত্র পুনরাবৃত্তি করতে টিপলস ব্যবহার করে:

string key, value;
BOOST_FOREACH(tie(key, value), my_map) { ... }

বুস্ট অ্যাসাইন ব্যবহার করে, আমি এই জাতীয় মানচিত্রটি অন্তর্ভুক্ত করতে পারি:

map<string, string> my_map = map_list_of("key1", "value1")("key2", "value2")("key3", "value3");

এবং ব্যাপ্তি অ্যাডাপ্টার এবং পাইপ ("|") অপারেটর ব্যবহার করে আমি মানচিত্রের মান (উদাহরণস্বরূপ) এর পিছনে পিছনে ফিরে যেতে পারি:

BOOST_FOREACH(string value, my_multimap.equal_range("X") | map_values | reversed) { ... }

1
এটা দারুন. এটি আমাকে বুস্ট অ্যাসাইনমেন্টের জন্য ডকুমেন্টেশনের মাধ্যমে পড়তে পেয়েছে: boost.org/doc/libs/1_49_0/libs/assign/doc/index.html
hamishmcn

5

আপনার বুস্ট :: প্রোগ্রাম_পশনগুলি পরীক্ষা করা উচিত। এটি কমান্ড লাইনকে পার্সিংকে আরও সহজ করে তোলে।


5

আমি গুলিগুলির একটি এসটিএল ধারককে অগ্রাধিকার হিসাবে বুস্ট পয়েন্টার ধারক ব্যবহার করি shared_ptr



3

আমি বুস্ট :: র্যান্ডম এবং বুস্ট :: অ্যাসিও এবং বুস্ট :: ফাইল সিস্টেমকে যাইহোক বুস্ট :: বাইন্ড, বুস্ট :: সার্কুলার_ বুফার এবং বুস্ট :: থ্রেডটি খুব ব্যবহারিক, স্মার্ট পয়েন্টার ঠিক আছে তবে আমি মেমরি ম্যানেজমেন্ট হিসাবে পরিবর্তে আরএআইআই পছন্দ করি


6
স্মার্ট পয়েন্টারগুলি হ'ল আরআইআইআই।
অন্ধকার

4
আরও স্পষ্টভাবে, স্মার্ট পয়েন্টারগুলি আপনাকে আরআইআইআই দেয় যখন গতিশীলভাবে মেমরি বরাদ্দ করা ছাড়া কোনও বিকল্প নেই।
ব্রানান

3

ঠিক আছে, আমি এখানে একটি নতুন খুঁজে পেয়েছি: স্ট্রিম্প
ব্যবহার না করে আমি বুস্টের সমান ফাংশনটি ব্যবহার করতে পারি এবং is_iequal প্রিকেটটিতে পাস করতে পারি
যেমন:
পরিবর্তে

stricmp( "avalue", mystr.c_str() ) == 0

আমি ব্যাবহার করতে পারি

equals( "avalue", mystr, is_iequal() ) 

দেওয়া হলে

#include <boost/algorithm/string.hpp>
using namespace boost::algorithm;

3

আমার দুটি সেন্ট এখানে:

  • বুস্ট :: স্কোপ_এক্সিট - কেবল একটি ব্যবহারের জন্য আরআইআইআই ক্লাস সংজ্ঞায়িত করার দরকার নেই
  • অনুমোদন :: কোন
  • বুস্ট :: বৈকল্পিক
  • পয়েন্টার কনটেইনার লাইব্রেরি বুস্ট করুন (ptr_vector)
  • পুল গ্রন্থাগার বুস্ট করুন
  • বুস্ট :: আনর্ডার্ড_ম্যাপ / বুস্ট :: আনর্ডার্ড_সেট

3

আমি boost::iclপাঠ্য পোস্ট-প্রসেসিংয়ের জন্য যথেষ্ট ব্যবহার করি । আমাকে অনেক সময় বাঁচিয়েছে কারণ অন্যথায় আমাকে নিজেই পাঠ্য বিভক্ত করতে হবে ...

BOOST_FOREACH আমার কোড সর্বত্র :)

boost::functionএবং boost::bindএকেবারে আবশ্যক। যদিও এখন তারা std::functionএবং std::bind। এগুলি সত্যই অপ্রয়োজনীয় কোডের পরিমাণ হ্রাস করতে সহায়তা করে এবং সাধারণত আমার নকশাগুলির জন্য (বা আমার বিভ্রান্তি) ভাল।

আমি সম্প্রতি ব্যবহার শুরু করেছি boost::interprocess::message_queueএবং এটিও দুর্দান্ত সরঞ্জাম।

আমি আরও অনেক কিছু ব্যবহার করব, তবে কিউটি এর কাছে বুস্টের মতো প্রচুর কাজ করার স্থানীয় উপায় রয়েছে। যদি আমাকে কখনও খাঁটি সি ++ প্রোগ্রাম করতে হয় তবে আমি অনুভব করি যে আমি হয়ে যাব boost::junkie:)


3

আমি সবচেয়ে বেশি যা ব্যবহার করি তা এখন টিআর 1 এ পাওয়া যায়:

  • ভাগ করা পয়েন্টার
  • অ্যারে ক্লাস

এখন আমি পুল ক্লাস এবং আরও কিছু নির্দিষ্ট জিনিস ব্যবহার করি।

আপনি এখন বুঝতে পেরেছেন যে বুস্টকে বোঝানো হচ্ছে বেশিরভাগ প্রোগ্রামারদের জন্য দরকারী, এই কারণেই এটি ভবিষ্যতের স্ট্যান্ডার্ড লাইব্রেরির পরীক্ষার শয্যা।


1

বুস্ট :: লেক্সিক্যাল_কাস্ট সম্পর্কে কথা বলছি, কেন স্ট্যান্ড :: স্ট্রিং লাইব্রেরিতে স্থির সদস্যের 'ফর্ম্যাট' জাতীয় কিছু নয়?
প্রায় সব গুই লিবের সিএসট্রিং :: ফর্ম্যাট ("% i") বা কিউ স্ট্রিং :: সংখ্যা ("% i") এর মতো কিছু থাকে যা একটি প্রাথমিক স্তরের প্রত্যাবর্তন করে।


4
যেমন: std::string = boost::format("Hello, %1% %2%") % "world" % "!!!").str();
রব

আপনি যদি টাইপ-সুরক্ষাটি ত্যাগ করতে ইচ্ছুক হন তবে আপনি ভিনপ্রিন্টফ (), উপবৃত্তাকার (...), ভাই_লিস্ট / স্ট্ডারগ।, এবং একটি স্থানীয় (স্ট্যাক-ভিত্তিক) বাফার দিয়ে নিজের রোল করতে পারেন।
মিঃ রিঃ

2
স্টাডি :: স্ট্রিং এর ইতিমধ্যে 71 টি ফাংশন অনেক বেশি রয়েছে (হার্ব সাটারের গণনা অনুযায়ী, আমার নয়)। বিশদগুলির জন্য getw.ca/gotw/084.htm দেখুন : আমি মনে করি এটি ব্যাখ্যা করার জন্য পর্যাপ্ত তথ্য রয়েছে (ক) ফর্ম্যাটটি কেন স্ট্যান্ড :: স্ট্রিংয়ে থাকতে হবে না, এবং (খ) শ্রেণীর সদস্যের তুলনায় জেনেরিক অ্যালগরিদম কেন লেখার চেয়ে ভাল? যাইহোক ফাংশন।
স্টিভ জেসোপ

4
বা অন্যভাবে বলতে
স্টিভ জেসোপ

1
ফর্ম্যাটটি লাইব্রেরির অংশ নয় কারণ স্ট্রাস্ট্রাপের চ্যালেঞ্জগুলির মধ্যে একটি হ'ল তিনি সি ++ ডিজাইন করার সময় টাইপ-সেফ ফর্ম্যাটেড আই / ও লাইব্রেরির নির্মাণ। স্পষ্টতই, ফলাফলটি আপনি আইওস্ট্রিমে দেখছেন। স্পষ্টতই, এ সময় কেউ বিরক্তি সম্পর্কে ভাবেনি। Someoneতিহ্যবাহীদের ঘরে বসে আরও বোধ করার জন্য কেউ হয়তো একটি ফর্ম্যাটস স্ট্রিম লিখতে চান?
ফিল মিলার

1

আমি মনে করি প্রশ্নটি বিপরীত হওয়া উচিত। আপনার কোন অংশটি আপনি উত্সাহিত করতে চান না ?

আমার অভিজ্ঞতার দিক থেকে এটি প্রতিটি সমস্যা ডোমেনে আকর্ষণীয় এবং দরকারী।

আপনার আগ্রহগুলি কভার করে এমন অঞ্চলগুলি খুঁজে বের করার জন্য আপনাকে বুস্ট ডকুমেন্টেশনের চারপাশে সময় কাটাতে হবে।

এর ব্যতিক্রম একটি হতে পারে boost::numeric::ublasযা তার কাজটি করে তবে ইয়েগেন এটি আরও ভাল করে তোলে


আমি সন্দেহ করি অষ্টনিয়ন গ্রন্থাগারটি অনেকে ব্যবহার করেন।
পিটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.