我可以在 C++ 运行时调用模板时切换模板的参数类型吗?

Can I switch an template's parameter type during calling it at runtime in C++?

首先,我有一个 class 管理器,可以管理不同的原始数据类型。出于这个原因,Manager 有模板方法。要调用它们,我有多个方法,其中有一个 switch case 到 select,模板方法将被调用的类型。

我有下一个 C++ 代码:

enum MyCallType
{
   MCT_DOUBLE,
   MCT_FLOAT,
   MCT_INT
}

template<class T>
class MyBuffer
{
public:
   MyBuffer (int size, MyCallType type)
   : mData (new T[size]),
   mType (type)
   {}
   ~MyBuffer ()
   {
   delete mData;
   }
   MyCallType getType () { return mType; }

   T* getData(){ return mData; }
private:
   T *mData;
   MyCallType mType;
}


class Manager
{
public:
   Manager (){}
   /* a lot of code */
   void process ()
   {
       switch (mType)
       {
           case MyCallType::MCT_DOUBLE:
           customProcess <double>();
           break;

           case MyCallType::MCT_FLOAT:
           customProcess <float>();
           break;

           / *more cases*/
       }
   }

   template<typename T>
   void customProcess ()
   {
       MyBuffer<T> *myCast = reinterpret_cast <MyBuffer <T> *>(mBuffer);
       T *myData = myCast->getData ();
       /* a lot of process */
   }

private:
   void *mBuffer;
   MyCallType mType;
}

我想避免 "process ()" 上的 switch case,因为我在管理器上有很多以相同方式工作的功能。有谁能够帮助我?我想要的可能吗?

正如 François 所说 "Template arguments and runtime inputs cannot interact",因此在运行时更改模板的参数是不可能的,但一个好的解决方案可能是使用 std::variantstd::any 来避免切换情况,如果您使用 C++17(如 Miles 所说)。

我实际使用的实现是使用宏,因为我想减少代码并且我正在使用 C++11