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