Это ориентировано на ключ, защита доступа копируют известную идиому?

Matthieu M. поднял шаблон для защиты доступа в этом ответе, который я видел прежде, но никогда сознательно рассмотрел шаблон:

class SomeKey { 
    friend class Foo;
    SomeKey() {} 
    // possibly make it non-copyable too
};

class Bar {
public:
    void protectedMethod(SomeKey);
};

Здесь только a friend из ключевого класса имеет доступ к protectedMethod():

class Foo {
    void do_stuff(Bar& b) { 
        b.protectedMethod(SomeKey()); // fine, Foo is friend of SomeKey
    }
};

class Baz {
    void do_stuff(Bar& b) {
        b.protectedMethod(SomeKey()); // error, SomeKey::SomeKey() is private
    }
};

Это позволяет больше прекрасно-детализированного контроля доступа, чем создание Foo a friend из Bar и избегает более сложных шаблонов проксирования.

Кто-либо знает, имеет ли этот подход уже имя, т.е. является известным шаблоном?

47
задан Community 23 May 2017 в 12:00
поделиться