ما هي هذه التقنية البرمجة؟ (تعزيز المكتبة)

StackOverflow https://stackoverflow.com/questions/809827

  •  03-07-2019
  •  | 
  •  

سؤال

وانا اعرف محاولة لفهم المثال من program_options المكتبة دفعة (<لأ href = "http://www.boost.org/doc/libs/1_38_0/doc/html/program_options/tutorial.html#id3761458 "يختلط =" noreferrer نوفولو "> http://www.boost.org/doc/libs/1_38_0/doc/html/program_options/tutorial.html#id3761458 )

وخصوصا هذا الجزء:

desc.add_options()
    ("help", "produce help message")
    ("compression", po::value<int>(), "set compression level")
;

وبالضبط ما يفعل هنا والتي تقنية غير ذلك؟

وهذا الجزء desc.add_options () يمكن أن يكون استدعاء دالة ولكن كيف الآخر () تناسب هنا؟ هل هذا نوع من الحمولة الزائدة المشغل؟

وشكرا!

هل كانت مفيدة؟

المحلول

وو"add_options ()" الدالة بإرجاع الواقع functor ، وهذا هو، كائن يتجاوز المشغل (). وهذا يعني أن الدعوة الدالة التالية

desc.add_options() ("help", "produce help message");

ويوسع فعلا ل

desc.add_options().operator()("help", "produce help message");

وو"المشغل ()" يعود أيضا functor، بحيث المكالمات يمكن بالسلاسل كما أظهرت.

نصائح أخرى

ويفترض add_options () إرجاع نوعا من functor التي لديها مشغل () طاقتها لدعم "تسلسل" (والذي هو تقنية مفيدة جدا، راجع للشغل)

والزائد (...) يسمح لك لإنشاء فئة التي تعمل مثل وظيفة.

وعلى سبيل المثال:

struct func
{
    int operator()(int x)
    {
        cout << x*x << endl;
    }
};

...

func a;
a(5); //should print 25

ولكن إذا كنت جعل المشغل () إرجاع إشارة <م> إلى كائن ، ثم يمكنك ان "سلسلة" المشغلين.

struct func
{
    func& operator()(int x)
    {
        cout << x*x << endl;
        return *this;
    }
};

...

func a;
a(5)(7)(8); //should print 25 49 64 on separate lines

وبما أن (5) إرجاع (أ (5)) (7) هو أكثر أو أقل مماثلة لa(5); a(7);.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top