Re: Как на выбор использовать вложенный тип или внешний?
От: Chorkov Россия  
Дата: 18.01.10 11:51
Оценка: 4 (1) +1
Здравствуйте, Marty, Вы писали:

M> Здравствуйте, коллеги!


M>Вопрос такой. Сейчас используются вложенные типы примерно так:

M>
M>struct CStructA
M>{
M>...
M>struct metaData
M>{
M>...
M>};
M>};

M>// сейчас это не требуется
M>// но это можно добавить в существующие исходники
M>typedef CStructA::metaData metaDataForStructA; 

M>// шаблонная функция, которую хочется модернизировать
M>template <typename STRUCT>
M>STRUCT::metaData getMetaData( const STRUCT &s)
M>...
M>


M>Т.е хочется отделить описание meta data от самих данных, с тем чтобы описывать и чужие данные, изменять чужие исходники в общем случае нельзя, с другой стороны, первый вариант уже много где используется и ломать его тоже не хочется. Как бы извратится и написать шаблон getMetaData?



A)
struct metaDataForStructB
struct CStructB
{
     typedef metaDataForStructB metaData;
...
};

struct metaDataForStructB
{
...
};


B)
template<class C>
struct metaData<C> { typedef typename C::metaData type; };


struct CStructA
{
    struct metaData;
    ...
};

struct CStructB
{
    ...
};
// Для классов, которые не поддерживали флаг metaData внутри себя, но для которых их нужно добавлять,
// пишем реализацию сами:  
struct metaData<CStructB> { typedef metaDataForStructB type; };

//////////////////////////////////////

template <typename STRUCT>
typename metaData<STRUCT>::type getMetaData( const STRUCT &s)
{
...
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.