24 Mayıs 2019 Cuma

Private Alana Erişmek

Örnek
Elimizde şöyle bir kod olsun
template<typename Tag>
struct contraband_ {
    using type = typename Tag::type;
    inline static type ptr;
};

template<typename Tag>
inline auto const contraband = contraband_<Tag>::ptr;

template<typename Tag, typename Tag::type ptr_>
class steal : contraband_<Tag> {
    static inline const char filler = [] {
        steal::contraband_::ptr = ptr_;
        return '\0';
    }();
};
Şöyle yaparız
class foo {
    int x = 3;
};

struct x_tag { using type = int foo::*; };

template class steal<x_tag, &foo::x>;

int main()
{
    foo f;
    // return f.x; ill-formed! Private!
    return f.*contraband<x_tag>; // Okay!
}

Hiç yorum yok:

Yorum Gönder