Как получить тип структуры из указателя на мембер структуры?
От: Аноним  
Дата: 12.11.09 14:15
Оценка:
Добрый день!
Есть пример:
struct A
{
static bool foo()
{
return false;
}
};

struct B
{
A a;
};

template<typename TB, typename TA> bool test(TA p)
{
typedef mega_get_type<TA>::type T;
return T::foo();
}

int main(int argc, char* argv[])
{
bool x = test<B>(&B::a);
return 0;
}

подскажите пожалуйсто как реализовать mega_get_type или может уже есть что-либо похожее?
Re: Как получить тип структуры из указателя на мембер структ
От: zaufi Земля  
Дата: 12.11.09 14:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>подскажите пожалуйсто как реализовать mega_get_type или может уже есть что-либо похожее?


ну если известно что передаваться будет только указатель на мембер...

#include <iostream>

using namespace std;

struct A
{
    static bool foo()
    {
        cout << __PRETTY_FUNCTION__ << endl;
        return false;
    }
};
struct B
{
    A a;
};

template <typename CT, typename FT>
bool test(FT CT::* a)
{
    return FT::foo();
}

int main()
{
    bool x = test<B>(&B::a);
    return 0;
}


иначе можно написать шаблонный test котоый boost::enable_if'ом будет проверять что T это is_member_pointer, и внутри уже вынимать тип поля и тип класса из этого T (смотреть в стороноу boost::function_types и думать над аналогом для датамемберов)...
Re: Как получить тип структуры из указателя на мембер структ
От: Bell Россия  
Дата: 13.11.09 02:46
Оценка:
Здравствуйте, Аноним, Вы писали:

Вот здесь обсуждалась задача определения типа члена — не совсем то, что тебе нужно, но может быть будет полезно: здесь
Автор: Alxndr
Дата: 07.04.09
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.