вывод шаблона класса из указателя на член - PullRequest
2 голосов
/ 14 февраля 2012

В качестве одного из параметров шаблона класса мне нужно использовать указатель на член:

template <class Base, typename Member, Member Base::*m>
class MemPtrTestUgly
{
...
};

Это необходимо использовать как

struct S
{
    int t;
}

MembPtrTestUgly <S, int, &S::t> m;

Но я хочу использовать это так:

MemPtrTestNice<S, &S::t> m;

Тип элемента выводится из указателя элемента. Я не могу использовать шаблон функции, так как класс MemPtrTest не предполагается создавать (есть только некоторые статические функции, которые будут использоваться). Есть ли способ сделать это на чистом C ++ 03 (без Boost или TR1)?

1 Ответ

1 голос
/ 14 февраля 2012

Вы можете использовать частичную специализацию и получить симпатичную реализацию:

template <typename TMember, TMember MemberPtr>
class MemPtrTest;

template <typename TBase, typename TType, TType TBase::*MemberPtr>
class MemPtrTest<TType TBase::*, MemberPtr>
{
    // ...
};

Это будет использоваться как:

MemPtrTest<decltype(&S::t), &S::t> m;

Конечно, для этого требуется decltype или эквивалент, если вы не хотите неявно указывать тип члена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...