- Код: Выделить всё
namespace core{
class ETypesHandle{
friend class ETypesFactory;
private:
mutable EBaseType* value;
public:
unsigned int id;
ETypesHandle();
ETypesHandle(const ETypesHandle& _handle);
~ETypesHandle();
ETypesHandle& operator= (const ETypesHandle& _handle);
bool operator == (const ETypesHandle& _handle) const;
bool operator != (const ETypesHandle& _handle) const;
void null();
};
class ETypesFactory
{
private:
static std::vector<unsigned int> free_entities;
static std::vector<EBaseType*> entities;
public:
ETypesFactory();
static ETypesHandle create(core::EDITOR_TYPE type, EBaseType** value = 0);
static bool free(const ETypesHandle& handle);
static EBaseType* get(const ETypesHandle& handle);
static bool is_valid(const ETypesHandle& handle);
static void release(core::EDITOR_TYPE type = core::_ET_ANY);
};
}
// ......
EBaseType* core::ETypesFactory::get(const ETypesHandle &handle)
{
EBaseType* result = 0;
if(is_valid(handle)){
result = handle.value;
}
return result;
}
bool core::ETypesFactory::is_valid(const ETypesHandle &handle)
{
size_t use_sz = entities.size();
bool result = false;
if(handle.value && use_sz > handle.id){
if(entities[handle.id] == handle.value){
result = true;
}
}
return result;
}
Какой аналог можно придумать? namespace'ы фиг с ним, из-за модульной структуры построения я и так могу обращаться к классу по имени_модуля.имя_класса, так что область имен мне не нужна. Про дружественные классы нашел только различные хаки, с использованием стороннего класса и то, вроде как для protected методов возможно. Перегрузи оператора присваивания нет, что здесь можно сделать? Вполне возможно, скорее всего можно обойтись и без mutable.