Я пытаюсь реализовать шаблон для состояний машин в C++, но я не уверен, как обращаться с элементами статического объекта. Каждая машина состояний будет определяться ее переменными состояния и ее переходами (которые являются структурами). Например:Инициализация статического члена-объекта
// stm.h
template <class T>
struct transition
{
... transition relevant data depending on state variables T ...
};
template <class T>
class stm
{
T *stv; // state variables
static struct transition<T> *transitions; // I would like to have only one copy of transitions for stm's of type T
... etc ...
};
Теперь предположим, что я пытаюсь реализовать СтМ Foo:
// foo_defs.h
struct foo_stv
{
char a;
int b;
};
// foo_transitions.h
// Note that I'm using a different file to keep everything in order
#include "stm.h"
#include "foo_defs.h"
struct transition<struct foo_stv> foo_transitions[] =
{
{ ... trans1 ... },
...,
{ ... transN ... }
};
// foo_stm.h
#include "stm.h"
#include "foo_defs.h"
#include "foo_transitions.h"
class foo_stm
{
stm<struct foo_stv> stm;
struct foo_stv stv;
... other data ...
};
Ok. Поэтому каждый экземпляр foo_stm должен иметь другой набор переменных состояния, но все экземпляры должны использовать одни и те же переходы. Вопрос в том, как мне определить/объявить stm<struct foo_stv>
, чтобы использовать foo_transitions
в качестве своего класса transitions
участник?
Также приветствуются любые советы о соблюдении правил кодирования на C++, поскольку я исхожу из мира кодирования C и начинаю работать с некоторыми механиками C++.
EDIT: Просто чтобы очистить мой вопрос, я думаю, вы должны забыть о логике СтМа и сосредоточить внимание на следующем: Что такое правильный способ сделать что-то вроде ...
foo_stm::stm.transitions = foo_transitions;
Почему нет одноэлементного шаблона? Проблема будет в том, что вы не можете инициализировать статический член, кроме как в cpp, OR, если вы используете недавний C++. – dzada
* «Также приветствуем любые советы о традициях кодирования на C++, поскольку я пришел из мира кодирования C и просто начал работу с некоторыми механиками C++ *« ОК: ключевое слово 'struct' не требуется в C++ (я говорю о предложениях типа' stm '. Единственное различие между' class' и 'struct' заключается в том, что область полномочий по умолчанию для класса является частной, в структуре открыто. –
Manu343726
« каждый экземпляр foo_stm должен иметь другой набор переменных состояния, но все экземпляры должны использовать одни и те же переходы ». Как вы можете иметь разные переменные состояния и одни и те же переходы? – BartoszKP