簡體   English   中英

C#C ++模板的通用行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM