У меня есть проект C ++, который компилируется как DLL. У меня есть несколько классов, которые обладают m_dSurveyStore в качестве переменных-членов. Карты имеют std::string
ключи и различные пользовательские классы для значений. например.:
std::unordered_map< std:string , Survey > SurveyStore;
Классы должны быть выставлены из моей DLL для использования другими программами (как консольными C ++, так и кодом .Net). Когда я использую std::string
в качестве ключа карты я получаю предупреждения компилятора по принципу «должен иметь dll-интерфейс для использования клиентами класса». Я читал другие посты, которые предостерегают от разоблачения интерфейсов, использующих типы std.
В идеале мои карты должны быть частными переменными-членами и (я думал) не должны быть доступны вне DLL:
class __declspec(dllexport) Project
{
private:
SurveyStore m_dSurveyStore;
}
Должен ли я использовать char *
для моего типа ключа карты, если я хочу выставить класс с этими картами в качестве членов, или есть надежный способ придерживаться std::string
и только выставить класс? Если char * это путь, пожалуйста, предоставьте синтаксис для определения char *
ключ.
Вы не должны использовать char*
в качестве ключа, в противном случае вы будете воспроизводить адрес указателя в качестве ключа, а не содержимое строки. Возможно, вам придется изменить свой контейнер std::unordered_map
в нормальный массив []
,
Других решений пока нет …