当前位置:  开发笔记 > 编程语言 > 正文

在C中重写C++方法

如何解决《在C中重写C++方法》经验,为你挑选了1个好方法。

如何在C中使用这些方法?我在某处读到它们可以"用结构指针作为第一个参数的函数替换",但我不知道如何做到这一点,如果这是正确的事情.

struct SCustomKeys
{
    struct SCustomKey Save[10];
    struct SCustomKey Load[10];
    struct SCustomKey Slot[10];

    struct SCustomKey PrintScreen;
    struct SCustomKey LastItem; // dummy, must be last

    //--methods--
    struct SCustomKey &key(int i) { return ((SCustomKey*)this)[i]; }
    struct SCustomKey const &key(int i) const { return ((SCustomKey*)this)[i]; }
};

以下是如何使用它们的示例:

void ZeroCustomKeys (SCustomKeys *keys)
{
    int i = 0;

    SetLastCustomKey(&keys->LastItem);
    while (!IsLastCustomKey(&keys->key(i))) {
        keys->key(i).key = 0;
        keys->key(i).modifiers = 0;
        i++;
    };
}

更多背景信息:http://pastebin.com/m649210e8

谢谢您的帮助.尽管如此,我还没有能够建议替换使用此函数的C++方法.关于如何处理这个的任何想法?

void InitCustomKeys (struct SCustomKeys *keys)
{
    UINT i = 0;

    SetLastCustomKey(&keys->LastItem);
    while (!IsLastCustomKey(&keys->key(i))) {
        SCustomKey &key = keys->key(i);
        key.key = 0;
        key.modifiers = 0;
        key.handleKeyDown = NULL;
        key.handleKeyUp = NULL;
        key.page = NUM_HOTKEY_PAGE;
        key.param = 0;
        i++;
    };

    //an example key
    keys->PrintScreen.handleKeyDown = HK_PrintScreen;
    keys->PrintScreen.code = "PrintScreen";
    keys->PrintScreen.name = L"Print Screen";
    keys->PrintScreen.page = HOTKEY_PAGE_MAIN;
    keys->PrintScreen.key = VK_PAUSE;
}

而我现在正在尝试的新功能是:

 struct SCustomKey* key(struct SCustomKeys *scs, int i) { 
    return &(((SCustomKey*)scs)[i]); 
 }

Reed Copsey.. 5

基本上,而不是像以下成员函数:

struct SCustomKey &key(int i) { return ((SCustomKey*)this)[i]; }

您需要将其重写为一个函数,该函数将指向SCustomKeys的指针作为它的第一个参数.

该功能将如下所示:

SCustomKey* key(SCustomKeys* customKeys, int i) 
{ return ((SCustomKey*)(customKeys)+i); }

这应该为您提供指向您尝试访问的元素的指针.



1> Reed Copsey..:

基本上,而不是像以下成员函数:

struct SCustomKey &key(int i) { return ((SCustomKey*)this)[i]; }

您需要将其重写为一个函数,该函数将指向SCustomKeys的指针作为它的第一个参数.

该功能将如下所示:

SCustomKey* key(SCustomKeys* customKeys, int i) 
{ return ((SCustomKey*)(customKeys)+i); }

这应该为您提供指向您尝试访问的元素的指针.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有