使用 boost::variant 调用模板类函数

use boost::variant to call template class functions

本文关键字:类函数 variant boost 使用 调用      更新时间:2023-10-16

我有一个模板类

template <T>
class class1
{
    template< typename T1, typename T2>
   void func1 ()
   {  // do somthing }
   template< typename T1>
   void func2 ()
    { //do something }                                                     
};
class class2
{
     // Have three objects based on template type
     public:
     class2 ()
     {
         if (case1)
             obj = class1<type1> ;
         else if (case2) 
            obj = class1<type2>;
         else if (case3)
            obj = class1<type3>;
      }
       void fun1 ()
       { obj->func1(); }  //calling class1 function based on template type
        void func2 ()
       { obj->func2(); }  //
      typedef boost::variant <class1<Type1>, class1 <type2>, class1 <type3>> obj1;
      obj1 obj;
 };

如何使用 boost::variant 调用 class1 函数。无法创建虚拟类,因为无法创建模板化的虚拟函数,我需要根据模板类型创建一个对象,以避免每个函数中的其他对象。

使用采用任何类型(模板operator()的访问者:

boost::apply_visitor([](auto& x){ x.func1(); }, obj);