查看完整版本: [已解決-4樓大神]這應該算是涵式指標問題吧
頁: [1]

baepi 發表於 2021-6-10 12:06 PM

[已解決-4樓大神]這應該算是涵式指標問題吧

本帖最後由 baepi 於 2021-6-13 02:39 PM 編輯

小弟最近有個專案~需要用到如下功能...以下是範例,與小弟的問題
class _class
{
public:
        void(*Func_Name) (void) = NULL;
        void aa()
        {
                cout << "這是內部程式\n";
        }
};
void bb()
{
        cout << "這是外部程式\n";
}
void main()
{
        _class cc;
        cc.Func_Name = bb;
        cc.Func_Name();
        system("pause");
        cc.Func_Name = cc.aa;//此處不合法
        cc.Func_Name();
        system("pause");
}如程式碼展示~當cc.Func_Name = bb;<<<指向非class與其它包裝類的程式碼時,這是可以正常運作的
但是當cc.Func_Name指向class內的涵式時,編譯器就不給過了(廢話)
我依稀記得是有辦法可以解決的~但是太少碰到此情況~現在已經不記得怎樣才可以指向類別類的涵式
請知道的大大們告知~在此先感謝了
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

snowflying 發表於 2021-6-12 04:32 AM


int main()
{
        _class cc;
        //cc.Func_Name = bb;
        //cc.Func_Name();
        cc.Func_Name = &_class::aa;//此處不合法
        (cc.*cc.Func_Name)();
}
bb 和 aa 原則上只能二選一,不然就是得調整呼叫方式
因為成員函式編譯完實際上會塞一個 this 指標當第一個參數
所以 aa 和 bb 其實傳的參數個數不同

baepi 發表於 2021-6-12 11:24 AM

snowflying 發表於 2021-6-12 04:32 AM static/image/common/back.gif
bb 和 aa 原則上只能二選一,不然就是得調整呼叫方式
因為成員函式編譯完實際上會塞一個 this 指標當第一個 ...

感謝有大神回應~~~
如大神所述~二者只能取其一~而我想要的~正是指向class內部的涵式
畢竟指向外部...於我這方案來說~壓根是不需要的~我只是為了說明~沒想到卻混淆我的主要問題了
所以~大大~如何用指標指向自己class內部的涵式呢?
小弟再進一步說明寫作的想法
有一個class A型態~裡面有一個涵式指標
然後再做一個class B型態~它繼承於A型態~然後再生成涵式1~涵式2~涵式3....很多不等
最後產生B型態一個物件~該物件用A的涵式指標~指向B裡面的涵式1~涵式2~涵式3...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

snowflying 發表於 2021-6-13 01:09 AM

baepi 發表於 2021-6-12 11:24 AM static/image/common/back.gif
感謝有大神回應~~~
如大神所述~二者只能取其一~而我想要的~正是指向class內部的涵式
畢竟指向外部...於我 ...

抱歉,我忘記 class 裡面有修改,忘了附上,前一層樓那個是可以動的
如果要繼承,也是相同的方法
#include <iostream>
using namespace std;

class A
{
    public:
        void(A::*Func_Name) (void) = NULL;
        void func_a()
        {
                cout << "這是內部程式 A\n";
        }
        void func_b()
        {
                cout << "這是內部程式 B\n";
        }
};

class B: public A{};

int main()
{
        A a;
        B b;
        a.Func_Name = &A::func_a;
        (a.*a.Func_Name)();
        b.Func_Name = &A::func_a;
        (b.*b.Func_Name)();
        b.Func_Name = &A::func_b;
        (b.*b.Func_Name)();
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

sst311212 發表於 2021-6-13 03:23 AM

baepi 發表於 2021-6-12 11:24 AM static/image/common/back.gif
感謝有大神回應~~~
如大神所述~二者只能取其一~而我想要的~正是指向class內部的涵式
畢竟指向外部...於我 ...

https://pastebin.com/a16Qp31A

<br><br><br><br><br><div></div>
頁: [1]