Без всякого буста!
Решил эту задачу несколько минут назад =)
файл "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, Вы писали:
__>Господа!
__>Имеются ли среди вас джедаи, овладевшие дао пострения данной идиомы в рамках стандарта, не испльзуя при этом буст ?
__>Если да, то пожалуста научите Силе