2012-04-19 64 views
0

我正在使用boost msm庫(您不需要知道它是如何工作的)來編寫我的statemachine,並且我有一個cpp源文件組織問題。好的做法,包括源文件

在第一個源文件中(1.cpp)我定義了statemachine,事件和動作以及轉換表,但是我想定義另一個cpp文件中的狀態,僅僅是因爲我需要編輯狀態國家機器中的其他事情往往更頻繁。

現在我所做的是我寫的狀態在另一個源文件(2.cpp),我包括在1.cpp

2.cpp

它編譯和一切,但它不乾淨可言,標識喜歡封裝這個不知何故......任何想法?

回答

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 2012-04-19 02:36:12

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:Ofcouse fsm.c包括在C++類的定義fsm.h

2

通常和函數原型中頭文件(在.H或.HPP結尾)存在,與現有的在源功能的實現文件(以.cpp或.cxx結尾)。這使您可以公開外部接口,以便其他文件可以使用第一個文件中使用的定義。您可以在頭文件中創建函數原型和類聲明,然後將這個頭文件包含在兩個cpp文件中。

一般來說,最好只包含頭文件,不要在其他文件中包含源文件。