У меня есть класс C ++, подобный следующему, который прекрасно компилируется, пока я не попытаюсь экспортировать его из DLL.
MyClass.h:
class SomeClassNotDefinedHere;
class MyClass {
protected:
templated<SomeClassNotDefinedHere> m_member;
}
Если я экспортирую это с помощью
class __declspec(dllexport) MyClass
Он не компилируется, пытаясь создать экземпляр всех встроенных членов templated<SomeClassNotDefinedHere>
,
Есть ли простой способ избежать этого? Я не хочу добавлять SomeClassNotDefinedHere в качестве зависимости каждой библиотеки, использующей MyClass.
Некоторые из шаблонного кода, это умный указатель, как класс. (пытался сохранить мой пример минимальным, реальный шаблонный класс OSG :: ref_ptr)
template<class T>
class templated
{
public:
typedef T element_type;
templated() : _ptr(0) {}
templated(T* ptr) : _ptr(ptr) { if (_ptr) _ptr->ref(); }
templated(const templated& rp) : _ptr(rp._ptr) { if (_ptr) _ptr->ref(); }
private:
T* _ptr;
}
Избегать классов или больших редизайнов — это то, чего я бы предпочел избегать, код уже используется в Linux.
Задача ещё не решена.
Других решений пока нет …