gpt4 book ai didi

c++ - 在 C 中重写 C++ 方法

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:32 25 4
gpt4 key购买 nike

如何在 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]);
}

最佳答案

基本上,而不是像这样的成员函数:

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

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

函数如下所示:

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

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

关于c++ - 在 C 中重写 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com