代码之家  ›  专栏  ›  技术社区  ›  user1008636

在C++中,当模板是可变的时,使用什么返回类型?[副本]

c++
  •  -2
  • user1008636  · 技术社区  · 3 年前

    在下面的代码片段中,我应该将什么作为 MyOtherClass 在`MyClass::create``函数的返回类型中?

    为了更容易,我可以让A、B、C类都继承一个公共类。

    还有更优雅的方法吗?

    template<class MyTemplateClass>
    class MyOtherClass{
      //
    };
    
    class MyClass{
       public: 
         MyOtherClass<//What do I put here?>
         MyClass::create(const std::string& input){
           if (input == "a"){
             return MyOtherClass<A>(); //A is a class
           }
           if (input == "b"){
             return MyOtherClass<B>(); // B is a class
           }
           return MyOtherClass<C>(); // C is a class
         }
    };
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   Julien Lopez    3 年前

    简单的回答是,你不能照原样。

    您可以通过继承(A、B和C从公共基类继承)来执行类似的操作, 或带有std::variant,或带有类型擦除(MyOtherClass继承自某物)

    问题更多的是,你计划如何使用函数中的内容?