gpt4 book ai didi

C# 通用行为与 C++ 模板

转载 作者:行者123 更新时间:2023-11-28 02:52:21 26 4
gpt4 key购买 nike

我正在尝试将一些 C# 代码移植到 C++。我想保持结构相似,但我意识到这可能并不总是可行。

根据我的研究,C++ 模板应该比 C# 泛型更强大/更灵活,但我似乎无法重新创建特定的行为。

这是我当前 C# 结构的一个过度简化的示例:

public class MyGeneric<T>
{
public void MyTypeSafeMethod(T arg1)
{
//logic here
}
}

public class MyImplA : MyGeneric<MyImplA>
{
//Class config etc..
}

public class MyImplB : MyGeneric<MyImplB>
{
//Other config etc...
}

public static class MyCollectionOfGenericImpl
{
public static MyImplA A = new MyImplA();
public static MyImplB B = new MyImplB();
}

public class Program
{
void Main()
{
//Doesn't compile, method is typesafe
MyCollectionOfGenericImpl.A.MyTypeSafeMethod(MyCollectionOfGenericImpl.B);
}
}

截至目前,我还没有真正看到使用 C++ 模板执行此操作的方法(查看了一些 typedef + 模板,但我不知道这对我有何作用)。

目前,我的解决方案是完全废弃模板。我会有一个基类(即 MyGeneric)和一个具有我的逻辑的 protected 方法(即 MyTypeSafeMethodProt)。然后,我将在每个使用 protected 逻辑的类实现中公开一个新的类型安全方法。

有什么方法可以使用模板或其他代码更少的方法来实现这一点?

最佳答案

将给定代码转换为 C++ 完全没有问题。它只是一种句法(机械)转换。这会在调用 main 函数时重现所需的编译错误。

简而言之,我完全不知道感知到的问题是什么。

但希望它能有所帮助,不管问题如何,这里是相应的 C++ 代码和原始 C# 代码的名称:

template< class T >
struct MyGeneric
{
void MyTypeSafeMethod( T& arg1 )
{
//logic here
}
};

struct MyImplA : MyGeneric<MyImplA>
{
//Class config etc..
};

struct MyImplB : MyGeneric<MyImplB>
{
//Other config etc...
};

struct MyCollectionOfGenericImpl
{
static MyImplA A;
static MyImplB B;
};

MyImplA MyCollectionOfGenericImpl::A;
MyImplB MyCollectionOfGenericImpl::B;

auto main()
-> int
{
//Doesn't compile, method is typesafe
MyCollectionOfGenericImpl::A.MyTypeSafeMethod( MyCollectionOfGenericImpl::B );
}

关于C# 通用行为与 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22762417/

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