2010-10-15 123 views
0

我在說的是This。現在,我的問題是我有一個接口頭文件,我真的不喜歡做任何實現。可以從該頭中聲明的基類派生的類採用這種習慣用法嗎?因爲據我所知,我必須爲基類定義(受保護的)複製構造函數,這意味着我必須執行字符串(char *)副本。而且我不想將任何標頭包含在我的接口標頭文件中,因爲this。有任何想法嗎?虛擬構造函數問題

編輯:

class PluginFunction 
{ 
    public: 
     explicit PluginFunction(){} 
     virtual ~PluginFunction(){} 

     virtual int GetFunctionID() const = 0; 
     virtual const char* GetFunctionName() const = 0; 

     virtual bool EvalFunction(int&, RNode*, int){return true;} 
     virtual bool EvalFunction(double&, RNode*, int){return true;} 
     virtual bool EvalFunction(char*&, RNode*, int){return true;} 

     virtual PluginFunction* Clone(); 
    protected: 
     explicit PluginFunction(const PluginFunction&) 
     { 
      //I dont want to strcpy :(which will have to include some header. 
      //Or I'll just iterate the buffer myself :). 
     } 

    private: 
     PluginFunction& operator=(const PluginFunction&); 

     int i_ID; 
     char* z_Name; 
}; 
+0

請張貼一些示例代碼,但不清楚你的問題是什麼。 – 2010-10-15 12:22:24

+1

您的第一個問題請參閱工廠方法http://sourcemaking.com/design_patterns/factory_method。對於你的第二個問題,可以試用PIMPL的習慣用法。 http://www.gotw.ca/gotw/024.htm – DumbCoder 2010-10-15 12:53:24

回答

0

是從基類在該標頭派生的類可以使用該習語。我不確定你在哪裏看到問題。

4

爲什麼你不能把構造函數代碼放在它自己的.cpp文件中?如果需要,您只需在其中包含相關的str操作標題。

我也不知道你爲什麼不使用std :: string而不是使用原始字符指針。如果您真的需要,您可以隨時使用.c_str()函數返回原始指針。

爲什麼需要將所有內容放在包含函數體的頭文件中的唯一原因是如果您希望它們內聯或者類是模板化的。