Значение синтаксиса шаблона с квалификатором области

Я видел это недавно:

template <class U> struct ST
{
...
};
template <class U, class V>
struct ST<U V::*>
{
...
};

Я предполагаю, что второй шаблон является специализацией первого.

Но какова семантика U V::* ???

4

Решение

Это означает «указатель на член класса V где тип члена U «. Например,

struct X
{
int x = 0;
};

// ...

int X::*p = &X::x;     // <== Declares p as pointer-to-member

ST<decltype(&X::x)> s; // <== Will instantiate your template specialization,
//     with U = int and V = X

ST<int X::*> t;        // <== Will instantiate your template specialization,
//     with U = int and V = X
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]