dllexport с вложенными классами

#c #dllexport

#c #dllexport

Вопрос:

В DLL, над которой я работаю, у меня есть следующий класс, который я хотел бы экспортировать:

 class A {

public:
    class B
    {
        std:string placeholder;
    };

    boost::shared_ptr<B> sp;
};
  

С помощью этого кода мне нужно dllexport A , A::B и boost::shared_ptr<A::B> . Я не могу выполнить dllexport boost::shared_ptr<A::B> (что я должен сделать на уровне пространства имен) перед объявлением A::sp , потому class A::B что пока неизвестно. Объявляя это так:

 class A::B;
  

не работает. Объявляя это так:

 class B;
  

фактически объявляет другой класс. Как я могу это решить?

Комментарии:

1. Что вы имеете A::B в виду, пока не знаете? B является ли полностью пустой класс к моменту нажатия boost::shared_ptr<B> sp;

2.@NathanOliver Мне тоже потребовалось некоторое время, чтобы разобраться. Проблема в том, что для правильной работы вам потребуется объявление области имен template __declspec(dllexport) boost::shared_ptr<A::B>; между объявлением A::B и A::sp объявлением .

3. @Angew О, здорово. Вы должны указать это в поле для ответа 🙂

4. @NathanOliver За исключением того, что это разъяснение, а не решение. Вы не можете разорвать определение класса пополам. Я просто отредактировал вопрос, чтобы, надеюсь, сделать его немного понятнее.

5. Я добавил переменную-заполнитель, поэтому A::B она больше не пуста.