Заголовочный файл класса выглядит следующим образом:
enum class My_Type {
type1,
type2
};
template <int dim>
class My_Class {
public:
My_Class() {};
template <My_Type p_type>
void
func();
}
СРР-файл:
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/ Я просмотрел пару ссылок, но не уверен, что видел решение.
int
не похоже на то, что у него должно быть всего несколько возможных экземпляров.) - person aschepler   schedule 04.06.2013