【发布时间】:2017-10-11 11:00:42
【问题描述】:
我有一个模板类
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 函数。无法创建虚拟类,因为无法创建模板化虚拟函数,我需要根据模板类型创建单个对象以避免每个函数中出现 if else。
【问题讨论】:
-
func1/func2是模板是否正常?如果是,你想用哪种类型称呼他们? -
是的 func1/func2 都是模板,它取决于运行时哪个函数可以基于传递给主函数的参数
-
模板类型可以是任何东西,int、double、string 或基于运行时传递的参数的用户定义类
-
在哪些情况下您会调用
class1<type1>::func1<int, char>()或class1<type1>::func1<void, double>()?您有一个变体,它指示调用函数的实例,但您没有提供调用正确实例的信息。 -
上述代码只是一个示例,实际代码更多,所以我只是粘贴了我面临问题的部分的示例。
标签: c++ templates boost-variant