Вход на сайт
[C++] Два разных string-класса
106
NEW 25.09.06 09:43
Проблема в следующем: в системе используется свой собственный string-класс. Внешняя библиотека требует c-ctring или std::string. К сожалению, внутренний класс не дает ни того, ни другого: нужно явно преобразовывать. А хочется на лету и без геморроя. Что делать? (с)
Первое, что приходит на ум, написать класс, который поддерживает оба интерфейса.
Первое, что приходит на ум, написать класс, который поддерживает оба интерфейса.
25.09.06 13:51
в ответ Simple 25.09.06 09:43
IMHO, если нельзя дописать внешнему стринг-классу необходимые операторы, то остаются две возможности: либо прилепить всем классам возвращающим нестандартный стринг адапторы, или же (если их дофига), прилепить декоратор к стринг-классу. Типа так:
То бишь мы используем CustomStringDecorator в своих интерфейсах на границе систем, а в своей системе можем работать с std::string.
В ответ на:
#include <string>
#include <iostream>
class CustomString
{
std::string data_;
public:
CustomString() : data_("test string" ){};
const char* data() const { return data_.c_str(); }
};
class External
{
CustomString s_;
public:
const CustomString some_interface() const { return s_; }
};
class CustomStringDecorator : public CustomString
{
public:
CustomStringDecorator( const CustomString& cs ) : CustomString( cs ) {}
operator const std::string() const { return std::string( data() ); }
operator const char*() const { return data(); }
};
class Internal
{
public:
void some_interface( const CustomStringDecorator& csd )
{
std::cout << csd << std::endl;
}
};
int main()
{
External ex;
Internal in;
in.some_interface( ex.some_interface() );
}
То бишь мы используем CustomStringDecorator в своих интерфейсах на границе систем, а в своей системе можем работать с std::string.