模板化类中模板化函数的显式实例化

时间:2013-06-04 12:43:33

标签: c++ templates c++11

该类的头文件如下:

 enum class My_Type {
     type1,
     type2
 };

 template <int dim>
 class My_Class {
 public:
     My_Class() {};

     template <My_Type p_type>
     void
     func();
 }

cpp文件:

template <int dim>
template <My_Type p_type>
void
My_Class<dim>::func() {
     if (p_type==My_Type::type1) {
         ...
     } else {
         ...
     }
     ....
}

电话如下:

My_Class<2> my_obj;
my_obj.template func<My_Type::type1>();

一切都很好但没有链接:

'Undefined symbols for architecture x86_64'

这是因为代码的一部分在库中。因此我需要明确地实例化。

对于班级来说这很明显:

 template class My_Class<2>;

问题是,在这种情况下如何实例化模板化函数?任何技巧或变通方法?

/ p /从enum看,如果重要的话,我使用C ++ 11。

p / p / s /我查看了几个链接,但不确定我是否看到了解决方案。

1 个答案:

答案 0 :(得分:0)

有趣的是,通过反复试验,我推断出了正确的语法:

template class MyClass<2>;
template void MyClass<2>::func< My_Type::type1>();
template void MyClass<2>::func< My_Type::type2>();