Можно ли в C++11 получить тип указателя члена в шаблоне?

Я знаю, что это было невозможно в C++03, но я надеюсь, что есть какое-то новое вуду, позволяющее мне это сделать. См. ниже:

template <class T>
struct Binder
{
    template<typename FT, FT T::*PtrTomember>
    void AddMatch();
};
struct TestType
{
    int i;
};
int main(int argc, char** argv)
{
    Binder<TestType> b;
    b.AddMatch<int,&TestType::i>(); //I have to do this now
    b.AddMatch<&TestType::i>(); //I'd like to be able to do this (i.e. infer field type)
}

Есть ли способ сделать это в C++11? Поможет ли decltype?

** ОБНОВЛЕНИЕ: Используя пример Влада, я думал, что что-то подобное будет работать (предупреждение: я не компилировал, так как сейчас создаю компилятор с поддержкой decltype)

template <class T>
struct Binder
{
    template<typename MP, FT ft = decltype(MP)>
    void AddMatch()
    {
        //static_assert to make sure MP is a member pointer of T
    }
};
struct TestType
{
    int i;
};
int main()
{
    Binder<TestType> b;
    b.AddMatch<&TestType::i>();  
}

Будет ли это работать?

6
задан Jaime 17 May 2012 в 21:22
поделиться