Re: typeof его дери.
От: Sm0ke Россия ksi
Дата: 10.11.06 11:48
Оценка: 3 (2)
Без всякого буста!

Решил эту задачу несколько минут назад =)

файл "test.cpp"

#include "type.h"

class some_class
{};

// для каждого типа должен быть свой уникальный номер
DEF_TYPE_ID(some_class, 1)

/*template <>
struct type::test<some_class>
    : public base<1>
{};

template <>
struct type::all<1>
{
    typedef some_class result;
};*/

void fn_test()
{
    some_class obj;
    GET_VAR_TYPE(obj) obj2, obj3, obj4;
    //type::all<sizeof(type::get(s).a)>::result s2;
}


файл "type.h"

struct type
{
    template <int I>
    struct all;

    template <>
    struct all<0>
    {
        typedef void result;
    };

    template <int I>
    struct base
    {
        char a[I];
    };

    template <>
    struct base<0>
    {};

    template <class T>
    struct test;

    template <>
    struct test<void>
        : public base<0>
    {};

    template <class T>
    static test<T> get(T param);
};

#define DEF_TYPE_ID(TYPE, ID)        \
    template <>                        \
    struct type::test<TYPE>            \
        : public base<ID>            \
    {};                                \
    template <>                        \
    struct type::all<ID>            \
    { typedef TYPE result; };

#define GET_VAR_TYPE(VAR)            \
    type::all                        \
    <                                \
        sizeof(type::get(VAR).a)    \
    >::result


Но чтобы тип перименной можно было определить,
этот тип надо "зарегистрировать" под уникальным int'овым индексом.
Используя макрос DEF_TYPE_ID(тип, номер)

Здравствуйте, black_wolf_ltd, Вы писали:

__>Господа!

__>Имеются ли среди вас джедаи, овладевшие дао пострения данной идиомы в рамках стандарта, не испльзуя при этом буст ?

__>Если да, то пожалуста научите Силе
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.