如何避免在C++中无法重载返回类型

Gra*_*eme 0 c++

我有功能,可以创建许多不同的模板类型; 一个简单的问题例子是:

EncodedMsg<?>* encode(const Msg& msg)
{
    if(msg.qty < 100) 
        return new EncodedMsg<short>(...);
    else if(msg.qty < 100000)
        return new EncodedMsg<int>(...);
    else 
        return new EncodedMsg<long>(...);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 关于模板的内容的决定是在函数内决定的
  2. 我不能在返回类型上重载
  3. 我不想返回基类类型的EncodedMsg,因为我将不得不解码它后面的消息类型

谁能想到解决这个问题的方法呢?

chr*_*ock 8

您试图以动态方式使用模板,这是不可能的.模板的类型必须在编译时知道,因此您无法根据一系列条件进行区分.

要在运行时更改类型,您需要来自类和继承的多态性.