Должны ли государства в FSM дружить с типом контекста?

Я построил автомат для конечных автоматов на основе классов. Класс контекста (класс, внутреннее состояние которого изменяется) имеет несколько методов, к которым должны обращаться только состояния (увеличивая / уменьшая некоторые итераторы, нажимая / выталкивая состояния, устанавливая состояние принятия и т. Д.). Прямо сейчас они являются публичными из-за различных государств, нуждающихся в доступе к ним.

Было бы лучше сделать методы защищенными / частными и определить состояния как друзей контекста?

(nb4 «основанный на мнении!»)

0

Решение

Может быть разумно создать коллекцию классов, которые работают вместе для общих целей друзей, но есть одна альтернатива, которую вы могли бы рассмотреть.

Для действительно короткого, наивного примера:

class outer
{
private:

int a;
int b;

public:
class inner
{ public:
outer * o;

inner( outer * io ) : o( io ) { o->a = 0; }

};

};

int main(int argc, const char * argv[])
{
outer o;
outer::inner i( &o );

return 0;
}

Я сделал это быстро, поэтому конструкция внутреннего взятия указателя не очень хороша в C ++, так что не принимайте это за совет.

Дело в том, что это компилируется, даже если inner получает доступ к закрытым членам external.

Это еще один способ сделать то, что вы просили.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]