繁体   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