クラスのヘッダー ファイルは次のとおりです。
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/s/ からわかるenum
ように、問題があれば C++11 を使用します。
p/p/s/ いくつかのリンクを調べましたが、解決策を見たかどうかはわかりません。