我有一个模板类
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函数。无法创建虚拟类beacuse无法创建模板化虚拟函数,我需要根据模板类型创建单个对象,以避免在每个函数中使用其他函数。
答案 0 :(得分:0)
使用任何类型的访客(模板operator()
):
boost::apply_visitor([](auto& x){ x.func1(); }, obj);