Общая коллекция шаблонных свойств?
От: Аноним  
Дата: 16.06.08 22:16
Оценка:
Хай!

Как обьявить общую коллекцию шаблонных свойств?

Например:
template<class Type, class BaseType, class OwnerType>
class TProperty
{
public:
    typedef bool (OwnerType::*SetProperty)(const Type& x_value);
    typedef Type (OwnerType::*GetProperty)() const;

private:
    Type value;
    BaseType* owner;

    SetProperty setter;
    GetProperty getter;
//...
};


Тогда в своем классе:

class MyObject : public BaseObject
{
private:
   TProperty<long, BaseObject, MyObject> left;
   TProperty<bool, BaseObject, MyObject> enabled;
   TProperty<string, BaseObject, MyObject> caption;

private:
   map<string, TProperty*> properties; //Ecли так обьявляю то компилер VS2005 падает fatal error C1001: An internal error has occurred in the compiler.
};


Как правильно залить в коллекцию все разнородные свойства? Неужели только через void*?

Спасибо!
Re: Общая коллекция шаблонных свойств?
От: Анатолий Широков СССР  
Дата: 16.06.08 23:57
Оценка:
А>Хай!

А>Как обьявить общую коллекцию шаблонных свойств?


Для этого надо наследоваться от общей базы:

class PropertyBase 
{
public:
   virtual ~PropertyBase() {}
...
};

template<class Type, class BaseType, class OwnerType>
class TProperty : public PropertyBase
{
...
};


ну и далее

class MyObject : public BaseObject
{
...
private:
   map<string, PropertyBase*> properties; 
};
Re[2]: Общая коллекция шаблонных свойств?
От: Аноним  
Дата: 17.06.08 00:04
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Для этого надо наследоваться от общей базы:


А смысл? Как же тогда вызывать шаблонные функции через базу?
Re: Общая коллекция шаблонных свойств?
От: alzt  
Дата: 17.06.08 06:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хай!


А>Как правильно залить в коллекцию все разнородные свойства? Неужели только через void*?


boost::any позволяет хранить разные типы.
Re[3]: Общая коллекция шаблонных свойств?
От: Анатолий Широков СССР  
Дата: 17.06.08 07:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Анатолий Широков, Вы писали:


АШ>>Для этого надо наследоваться от общей базы:


А>А смысл? Как же тогда вызывать шаблонные функции через базу?


Для этого Вам надо продумать интерфейс PropertyBase, который и позволит объединить "необъединяемое".
Re[3]: Общая коллекция шаблонных свойств?
От: Kluev  
Дата: 17.06.08 08:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Анатолий Широков, Вы писали:


АШ>>Для этого надо наследоваться от общей базы:


А>А смысл? Как же тогда вызывать шаблонные функции через базу?


через базу надо вызывать виртуальные функции, а шаблонами их нужно реализовывать.
Re[4]: Общая коллекция шаблонных свойств?
От: Аноним  
Дата: 17.06.08 09:45
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Для этого Вам надо продумать интерфейс PropertyBase, который и позволит объединить "необъединяемое".


Я вспомнил про VARIANT, можна через него TYPE->VARIANT->STRING и наоборот STRING->VARIANT->TYPE, то есть обьединяющие функции будут не шаблонные, а string-овые. Все разобрался. Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.