2011-07-26 16 views
1

我想要寫一類在C++中的參數中的一個是bitset<size>。 我想給予設施改變這個「大小」的任何對象的類,但應該是恆定的對象。問題爲模板類<class_name>已經BITSET作爲參數

如果我做一個變量const int size;並在構造函數初始化它,那麼它不編譯因爲writiting bitset<size>需要size是靜態的這將使同爲類的所有對象。

是否有任何其他方法不是製造類模板並傳遞大小classname<size>

感謝,但..但是這使得這個Foo類的對象,每當作爲成分(對象作爲數據成員)使用......會是需要再次作出這樣的類模板。我創建了一個類,並且通過了一個(#define BIT_SIZE 16到Foo位;)它給出了編譯錯誤,未定義的參考Foo < 16> :: Foo()。 Foo()是構造函數。我認爲它應該工作,因爲這也是編譯時間。我只想製作大小爲BIT_SIZE的位。我應該讓我的「下一級」類模板?可能是因爲其他錯誤而導致這些錯誤。但我一遍又一遍地檢查。


是的,先生我已經實現了這一點,但包含了頭文件,而不是cpp文件..........當我改變了這些以cpp文件......多個聲明錯誤來了。我正在研究Linux的Ubuntu的..當我把這些文件在工作的窗口dev_cpp。可能是因爲編譯器自動執行了我需要做的事情。所以我需要做什麼。

+0

什麼都在這段對話中你的問題?你向誰回覆? –

回答

1

沒有,有沒有其他的方法,因爲bitset<N>的實際實例化代碼是在編譯時生成的,所以您不可能在運行時延遲提供其大小。您必須使用非類型模板參數。

如果有可能,C++標準庫的創建者會這樣做,將有可能在運行時提供bitset大小,對不對?

使用另一位集實現是一個選項。

1

要使用bitset成員,你必須做出size模板參數和使用,在成員:

template <size_t N> 
class Foo 
{ 
    std::bitset<N> thebitset; 

public: 
    Foo() /* ... */ 
}; 

然後使用它,說Foo<12> x;

鑑於你的替代品問題,你可以使用運行時動態數組,而不是一個靜態的:

class Bar 
{ 
    std::vector<unsigned char> thedata; 

public: 
    explicit Bar(size_t n) : thedata(n, 0) { } 

    inline unsigned char & operator[](size_t i) { return thedata[i]; } 
    inline const unsigned char & operator[](size_t i) const { return thedata[i]; } 
}; 
+0

謝謝,但..它可以使用它。但是這使得這個Foo類對象每當用作組合(作爲數據成員的對象)......是否有必要再次創建該類模板。我做了一個班,並通過了一個(#define BIT_SIZE 16到Foo 位;)它給編譯錯誤提供了未定義的參考Foo <16> :: Foo()。 Foo()是構造函數。我認爲它應該工作,因爲這也是編譯時間。我只想製作大小爲BIT_SIZE的位。我應該讓我的「下一級」類模板?可能是因爲其他錯誤而導致這些錯誤。但我檢查 –

+0

我甚至給FOO默認值BITS_SIZE

+0

「undefined refrence」不是編譯時錯誤,它是一個鏈接器錯誤。你實現了構造函數嗎? –