Я пытаюсь написать шаблонную оболочку, которая работает с типом smart_ptr
, и в некоторых случаях необходимо создать исключение. Для этого случая я хотел бы включить имя типа, который обертывает класс. Поскольку я работаю со смарт-указателями, для типа будут доступны только предварительные объявления.
Итак, основной вопрос заключается в том, как получить строку для параметра шаблона, не имея доступного его определения? (Мне не нужно чистое имя, все, что напоминает имя, будет в порядке)
Моя попытка использовать typeid
не удалась, поскольку она требует определения класса (по крайней мере, в GCC).
Код, который мне необходим для работы, приведен ниже (который выдает ошибку в GCC)
#include <boost/shared_ptr.hpp>
using boost::shared_ptr;
class SomeClass;
void func( shared_ptr<SomeClass> obj );
template<class T>
class Wrap
{
shared_ptr<T> ptr;
public:
shared_ptr<T> get()
{
if( !ptr )
throw std::string(typeid(T).name());
return ptr;
}
};
extern Wrap<SomeClass> wrapSomeClass;
int main()
{
func( wrapSomeClass.get() );
}
(Эта установка привела к моему плохо сформулированному предыдущему вопросу - сообщение об ошибке немного запутанно)