نمایش نتایج 1 تا 3 از 3

نام تاپیک: ارسال آدرس تابع از یک کلاس به تابع در کلاس دیگر

  1. #1

    ارسال آدرس تابع از یک کلاس به تابع در کلاس دیگر

    سلام - من دو تا کلاس دارم، میخوام آدرس یک تابع رو از کلاس1 به کلاس2 ارسال کنه ( این ارسال و دریافت آدرس توابع، تو تابع init دو کلاس فوق انجام میشه)، وقتی تابعی عضو کلاس1 نیست، به راحتی میتونم آدرسشو ارسال کنم ( یعنی فقط تو فایل class1.cpp تعریف شده و تو class.h تعریف نشده ) ولی اگه عضو کلاس باشه نمیتونم و حتما باید static تعریف کنم اون تابع رو تا مشکل حل بشه - ممنون میشم راهنمایی کنید.

  2. #2

    نقل قول: ارسال آدرس تابع از یک کلاس به تابع در کلاس دیگر

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    سلام - من دو تا کلاس دارم، میخوام آدرس یک تابع رو از کلاس1 به کلاس2 ارسال کنه ( این ارسال و دریافت آدرس توابع، تو تابع init دو کلاس فوق انجام میشه)، وقتی تابعی عضو کلاس1 نیست، به راحتی میتونم آدرسشو ارسال کنم ( یعنی فقط تو فایل class1.cpp تعریف شده و تو class.h تعریف نشده ) ولی اگه عضو کلاس باشه نمیتونم و حتما باید static تعریف کنم اون تابع رو تا مشکل حل بشه - ممنون میشم راهنمایی کنید.
    سلام
    این کار ، یعنی Pointers to members یک syntax خاصی داره :
    https://docs.microsoft.com/en-us/cpp...s?view=vs-2017
    https://www.ibm.com/support/knowledg...01/cplr034.htm
    ولی چرا میخواید این کارا رو به این صورت انجام بدید ؟
    روش های ساده تری داره:
    در یک کلاس ، متغییری از نوع کلاس دوم تعریف کنید و اون تابع مورد نیاز رو در جای لازم صدا بزنید .
    میتونید ادرس کلاس دوم رو به کلاس اول بفرستید.
    طراحی برنامه تون نیاز به تغییر داره دوست عزیز .
    آخرین ویرایش به وسیله pe32_64 : پنج شنبه 13 دی 1397 در 19:29 عصر

  3. #3

    نقل قول: ارسال آدرس تابع از یک کلاس به تابع در کلاس دیگر

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    سلام - من دو تا کلاس دارم، میخوام آدرس یک تابع رو از کلاس1 به کلاس2 ارسال کنه ( این ارسال و دریافت آدرس توابع، تو تابع init دو کلاس فوق انجام میشه)، وقتی تابعی عضو کلاس1 نیست، به راحتی میتونم آدرسشو ارسال کنم ( یعنی فقط تو فایل class1.cpp تعریف شده و تو class.h تعریف نشده ) ولی اگه عضو کلاس باشه نمیتونم و حتما باید static تعریف کنم اون تابع رو تا مشکل حل بشه - ممنون میشم راهنمایی کنید.

    #include <iostream>
    #include <memory>

    using namespace std;

    class A {
    public:
    A(){}
    ~A(){}
    void func(){
    cout << "invoke function pointer!" << endl;
    }

    };

    template<class T>
    class Base{
    public:
    Base() : f(T::func){
    }
    ~Base(){}
    inline void invoke(){
    ((*fp).*f)();
    }
    private:
    decltype(T::func) f ;
    unique_ptr<T> fp ;
    };



    int main()
    {
    Base<A> base;
    base.invoke();
    return 0;
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •