2012-04-19 2 views
0

Я использую boost msm library (вам не нужно знать, как это работает), чтобы закодировать мой statemachine, и у меня есть вопрос об организации исходного файла cpp.Хорошая практика, в том числе исходные файлы

в первом исходном файле (1.cpp) Я определяю statemachine, событие и действия и таблицу перехода, но я хотел бы определить состояние в другом файле cpp только потому, что мне нужно будет редактировать состояния гораздо чаще, чем что-либо еще в statemachine.

Теперь то, что я сделал, что я написал состояния в другом исходном файле (файле 2.cpp) и я включил в файле 2.cpp 1.cpp

Он собирает и все, но его не чистят вообще, Id как инкапсулировать это как-то ... Все идеи?

ответ

2

Ну, как правило, вы должны включать только файлы .h, то есть файлы заголовков, которые объявляют типы и функции, которые будут реализованы в связанном с ним файле .cpp. Вам не нужно включать файл реализации вообще. Созданы ли файлы заголовков? Вот простой пример:

// Foo.h 
class Foo { 
    // note that it is not defined here, only declared 
    public void some_function(int i); 
}; 

// Foo.cpp 
#include "Foo.h" 
#include <iostream> 

// implement the function here 
void Foo::some_func(int i) { 
    std::cout << i; 
} 
+0

Я понимаю, это довольно просто, я имею в виду, что, если я хочу разделить исходные файлы для ясности ?. – Kam

0

Если бы я был написать это с нуля (конечное состояние машины), вложу следующие внутри:

fsm.h:

struct fsm_rule { 
    /* state to which this rule belongs to */ 
    int state; 
    /* new state */ 
    int next; 
    /* is called when rule matches */ 
    int (*fn)(int in, void *ctx); 
}; 

struct fsm_state { 
    int nrules; 
    struct fsm_rule *rules; 
}; 

struct fsm { 
    int nstates; 
    struct fsm_state *states; 
}; 

а затем внутри fsm.c я продолжу и реализую необходимые методы.

PS: fsm.c включает Ответ конечно fsm.h

2

Как правило, в C++ определений классов и существуют прототипы функций в заголовочных файлах (окончание в .h или .hpp), с выполнением функций, существующих в источнике файлы (заканчивающиеся на .cpp или .cxx). Это позволяет вам открыть внешний интерфейс, чтобы другие файлы могли использовать определения, используемые в первом файле. Вы должны сделать прототипы функций и декларации классов в своем заголовочном файле, а затем включить этот файл заголовка в оба файла cpp.

В целом, рекомендуется включать только заголовочные файлы и не включать исходные файлы в другие файлы.

Смежные вопросы