2

C++ のテンプレートについて理論的な質問があります。
次のコードがあるとします。

コード

struct C{
   int val = 15;
};

struct B{
    C c;
    int k = 9;
};

struct A{
    template<typename T, typename FType, FType T::* Field = nullptr>
    void test(T& d){
        if (Field != nullptr){
            int a = d.*Field;
        }
    }
};


int main(int argc, char *argv[])
{

    A a;
    B be;

    a.test<B, int, &B::c::val>(be);
    //a.test<B, int, &B::k>(be);
}

問題は、 B::kにアクセスできるのに、なぜB::c::valフィールドにアクセスできないのですか? B::c::valBのメンバーです。か否か?

4

1 に答える 1