-1

class を受け取る構造体テンプレートと、このクラスのメンバーへのポインターがあるとします。

struct A<A,&A::a>

そのようなテンプレートを宣言することはできません

template<class T,class U>
struct{};

私は書かなければならない

template<class T,typename T::type var>
struct{};

単純な構文&A::aにバインドできないのはなぜですか? typename Tメンバーのポインタになる前&A::aは型なので、単純な型名 T が機能すると期待できますが、そうではありません

4

1 に答える 1

2

&A::aタイプではなく、値です。したがって、テンプレート宣言は意味がありません。

それがどのように機能するかは次のとおりです。

template <typename A, int A::* Ptr> struct Foo { };

struct Bar { int n; };

int main()
{
    Foo<Bar, &Bar::n> f;
}

または、より一般的には、

template <typename T, typename U, U T::* Ptr> struct Foo { };

Foo<Bar, int, &Bar::n> f;
于 2012-10-23T14:13:33.243 に答える