У меня есть класс с шаблонными функциями.Одной из них является функция constexpr .Я хочу скомпилировать этот класс как библиотеку и использовать специализированные шаблонные функции от других клиентов.Пример:
//in myclass.h
struct myclass{
template<typename Entity>
static constexpr const char* myfnc1();
template<typename Entity>
static std::string myfnc2();
};
//in myclass.cpp
template<> const char* myclass::myfnc1<AnotherClass>() {return "str";}
template<> std::string myclass::myfnc2<AnotherClass2>() {return "str2"; }
template const char* myclass::myfnc1<AnotherClass>();
template std::string myclass::myfnc2<AnotherClass2>();
Когда я пытаюсь использовать myfnc1<AnotherClass>
в другой библиотеке, она говорит, что она не определена, но я могу использовать myfnc2<AnotherClass2>
.Когда я проверяю libmyclass.so с nm
, я вижу, что шаблон myfnc2 создан с AnotherClass2, а myfnc1 - нет.Я понимаю, что это причина, но интересно, есть ли способ заставить код работать так, как он есть?
Я использую g ++ версии 4.4.2.