gpt4 book ai didi

c# - 将指向成员的 C++ 指针转换为 C#

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:49 26 4
gpt4 key购买 nike

我一直在研究如何成功地将 C++ 成员指针转换为 C#,但我还没有发现任何有用的东西。假设我有这个功能。

typedef int STRUCT::*DEFINED;

protected static Method(STRUCT* sampleStruct, DEFINED pMember)
{
return (sampleStruct->*pMember);
}

我通过研究了解到 ->* 是指向成员的指针。在这种情况下,我们发送一个名为 STRUCT 的结构中成员变量的指针。由于 Method 不确定哪个成员作为参数发送,它通过指向成员的指针 sampleStruct->*pMember 访问它。

我认为Reflection可以帮助将这段代码转换为C#,或者可能是Delegates,但我真的不知道如何实现它,而且我在网上也没有找到任何类似的例子。任何帮助将不胜感激。

谢谢,YT

更新

这就是我在 C# 中实现它的方式。

我创建了一个枚举和一个类来表示 C++ 结构,而不是结构,如下所示:

C++ 结构

public struct ServerStats
{
int serverStat1;
int serverStat2;
int serverStat3;
int serverStat4;
int serverStat5;
}

现在,在 C# 中:

public enum ServerStatsEnum
{
serverStat1,
serverStat2,
serverStat3,
serverStat4,
serverStat5,
}

public class ServerStats
{
public int[] serverStatsArray;

public ServerStats()
{
int numElementsInEnum = Enum.GetNames(typeof(ServerStatsEnum)).Length;
serverStatsArray = new int[numElementsInEnum];
}
}

现在,我可以通过调用特定的枚举来访问数组的元素,如下所示:

public static void Operation(ServerStats server1, ServerStats server2, ServerStatsEnum index)
{
Console.WriteLine("serverStatsArray[{0}] in server1 is {1}", index, server1.serverStatsArray[(int)index]);
Console.WriteLine("serverStatsArray[{0}] in server2 is {1}", index, server2.serverStatsArray[(int)index]);
}

它的代码更多,但它在 C# 中原生运行,并且比其他解决方案更高效。

最佳答案

您可以使用委托(delegate)来模拟指向成员的指针访问。

class C
{
public int Method1() { return 1; }
public int Method2() { return 2; }
}

class Program
{
static void Main(string[] args)
{
C myC = new C();
Func<C, int> ptrToMember1 = (C c) => { return c.Method1(); };
int i = Method(myC, ptrToMember1 );
}

static int Method(C c, Func<C, int> method)
{
return method(c);
}
}

关于c# - 将指向成员的 C++ 指针转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11198050/

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