带范围限定符的模板语法的含义

时间:2013-04-03 22:06:49

标签: c++ templates syntax semantics

我最近看到了这个:

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

我假设第二个模板是第一个模板的特化。

但是U V::* ???

的语义是什么

1 个答案:

答案 0 :(得分:3)

这意味着“成员类型为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