[英]C# Generic behavior with C++ Templates
我正在嘗試將一些C#代碼移植到C ++。 我想保持結構相似,但我意識到這可能並不總是可行的。
根據我的研究,C ++模板應該比C#Generics更強大/更靈活,但我似乎無法重新創建特定的行為。
這是我當前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 );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.