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