যে বিধিটি কেবলমাত্র বিল্টিন অপারেটরদের জন্য foo->bar
সমান (*foo).bar
।
Unary operator *
সবসময় পয়েন্টার dereferences শব্দার্থবিজ্ঞান থাকে না। আমি একটি লাইব্রেরি তৈরি করতে পারলাম যার অর্থ ম্যাট্রিক্স স্থানান্তর, শূন্য বা আরও পার্সার মিল, বা আরও অনেক কিছু।
ভাষাটি আরও উদ্বেগজনক করে তুলবে যদি অযথা ওভারলোডগুলি এমন কিছু operator *
হঠাৎ করে operator ->
আপনার কাছে জিজ্ঞাসা না করে এমন একটি শব্দ অর্জন করতে পারে যা শব্দার্থবিজ্ঞানের দ্বারা বোঝা যায় না।
operator ->
পৃথকভাবে ওভারলোডযোগ্য, সুতরাং যদি আপনি এটি চান তবে আপনি ন্যূনতম প্রচেষ্টা দিয়ে একটি ওভারলোড করতে পারেন।
এছাড়াও মনে রাখবেন যে এই ধরনের ওভারলোডের কিছু বরং আকর্ষণীয় বৈশিষ্ট্য থাকবে, যেমন operator ->
চেইনের কোনও কোনও কাঁচা পয়েন্টার না ফেরানো পর্যন্ত স্বয়ংক্রিয়ভাবে কলগুলিকে কল করে। এটি স্মার্ট পয়েন্টার এবং অন্যান্য প্রক্সি প্রকারের জন্য বেশ কার্যকর।
#include <boost/make_shared.hpp>
#include <boost/shared_ptr.hpp>
#include <string>
#include <iostream>
#include <ostream>
struct Foo
{
boost::shared_ptr<std::string> operator -> () const
{
return boost::make_shared<std::string>("trololo");
}
};
int main()
{
Foo foo;
std::cerr << foo->size() << std::endl;
}