Альтернатива ответу Джо МакГрата:
Если вы действительно хотите, чтобы ваши клиенты имели доступ к Dog
общедоступному и защищенному интерфейсу, и не имеет смысл иметь абстрактный интерфейс,
- Вы можете использовать идиому pImpl , чтобы скрыть закрытый интерфейс.
- Дополнительно вы можете экспортировать строку в виде символов
Скрыть ваш оригинальный собака :
class Dog_Impl // your original class
{
public:
Dog_Impl(std::string name):_name(name){}
~Dog_Impl(){}
string::get_name();
private:
std::string _name;
};
Вставьте это в свой API:
class Dog_Impl; // fwd declaration
class PETS_EXPORT_API Dog {
public:
Dog(const char *name);
~Dog();
const char *get_name();
private:
Dog_Impl *pImpl;
};
Реализация должна просто передать весь открытый и защищенный интерфейс pImpl :
Dog::Dog(const char *name)
{
pImpl = new Dog_Impl(name);
}
Dog::~Dog()
{
delete pImpl;
}
const char *Dog::get_name()
{
return pImpl->get_name().c_str();
}