具有C++模板的 C# 泛型行为
C# Generic behavior with C++ Templates
我正在尝试将一些 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)和一个受保护的方法(即MyTypeSafeMethodProt),该方法具有我的逻辑。然后,我将在每个利用受保护逻辑的类实现中公开一个新的类型安全方法。
有什么方法可以用模板或其他更少的代码来实现这一点的方法?
将给定的代码转换为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 );
}
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 链表的泛型函数remove()与成员函数remove)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何编写将要继承的泛型代码?
- C++17 如何保存泛型可调用对象以供以后使用
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- C++泛型类错误,问题出在哪里?
- C++泛型类,单独实现?
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 泛型枚举和其他类型的重载模板函数
- 使用泛型类型推送到堆栈时出现问题
- 可变参数泛型 lambda 和函数重载
- C++ 泛型和多态性:这种模式可行吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- Java 是否像C++模板一样具有泛型推论?
- 为堆栈实现泛型集合
- 以特征类型作为参数的泛型函数回调
- 如何在容器中指定模板化别名的泛型类型