簡體   English   中英

如何在C ++中返回沒有模板的泛型類型?

[英]How can I return a generic type without templates in C++?

我期待創建一個可以返回泛型類型的方法,然后這個泛型類型可以由我明確定義的其他方法處理。

PCCommand CrossPlatform::GetCommandPC();
XboxCommand CrossPlatform::GetCommandXbox();

? CrossPlatform::GetCommand()
{
    #if PLATFORM == 1
        //PC
        return GetCommandPC();
    #elif PLATFORM == 2
        //xbox
        return GetCommandXbox();
    #endif

}

GetCommandPC和GetCommandXbox都返回不同的類型,那么如何在C ++中將它們作為泛型類型返回呢? 模板的問題,除非我錯了,我必須將一個類型傳遞給這個函數,但我不知道要傳遞什么類型,因為預處理器檢查將決定使用什么平台。

目前PCCommand和XboxCommand是枚舉類,所以我不確定是否可以使用帶枚舉類的基類型。

有沒有辦法實現這一目標,或者更好的方法來實現這一目標?

對於由#defines控制的跨平台類型:

PCCommand CrossPlatform::GetCommandPC();
XboxCommand CrossPlatform::GetCommandXbox();

#if PLATFORM == 1
    typedef PCCommand CrossPlatformCommand;
#elif PLATFORM == 2
    typedef XboxCommand CrossPlatformCommand;
#endif

CrossPlatformCommand CrossPlatform::GetCommand()
{
    #if PLATFORM == 1
        //PC
        return GetCommandPC();
    #elif PLATFORM == 2
        //xbox
        return GetCommandXbox();
    #endif

}

由於您正在使用條件編譯,並假設您只需要其中一種類型(即您正在運行的平台的類型); 你能做的最干凈的事情是擁有一個Command類型,在每種情況下都是正確的:

enum class Command
{
    #if PLATFORM == 1
        // PC
        // ...
    #elif PLATFORM == 2
        // xbox
        // ...
    #endif
};

以這種方式思考:當你在PC上時,其他平台的所有代碼都是死代碼 (它不會被使用,它不會被編譯,甚至可能無法被編譯!)。 一般的良好做法是避免死lying!

您可以使用繼承。 創建一個超類Command並生成PCCommand和XboxCommand子類,然后在函數中返回一個Command。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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