我希望创建一个可以返回泛型类型的方法,然后这个泛型类型可以由我明确定义的其他方法处理。
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是枚举类,所以我不确定是否可以使用带有枚举类的基类型。
有没有办法实现这一目标,或者更好的方法来实现这一目标?
答案 0 :(得分:6)
对于由#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
}
答案 1 :(得分:3)
由于您正在使用条件编译,并假设您只需要其中一种类型(即您正在运行的平台的类型);你能做的最干净的事情是拥有一个Command
类型,在每种情况下都是正确的类型:
enum class Command
{
#if PLATFORM == 1
// PC
// ...
#elif PLATFORM == 2
// xbox
// ...
#endif
};
以这种方式思考:当你在PC,其他平台的所有代码都是死代码(它不会被使用,它不会被编译,甚至可能无法编译!)。一般的良好做法是避免死lying!
答案 2 :(得分:1)
您可以使用继承。创建一个超类Command并生成PCCommand和XboxCommand子类,然后在函数中返回一个Command。