0
我想在類模板中使用memcpy。所以我的模板將被限制到C POD(結構)和char *的任何鏈接(並且可以在其他獨立類中聲明結構結構)。我希望任何類能夠訂閱它的功能(如果它有尊重的輸入參數)來投射事件。所以我的課,現在看起來像:如何讓我的C++類事件系統成爲一個僅限於一個數組類型的模板類?
class IGraphElement{
typedef void FuncCharPtr(char*, int) ;
public:
void Add(FuncCharPtr* f)
{
FuncVec.push_back(f);
}
void CastData(char * data, int length){
for(size_t i = 0 ; i < FuncVec.size(); i++){
char* dataCopy = new char[length];
memcpy(dataCopy, data, length);
FuncVec[i](dataCopy, length);
}
}
private:
vector<FuncCharPtr*> FuncVec ;
};
一般來說,我想兩件事情是真的一個(我嘗試在僞代碼解釋):
template < typename GraphElementDatataStructurePtrType>
class IGraphElement{
typedef void FuncCharPtr(GraphElementDatataStructurePtrType, int) ; // here I want FuncCharPtr to be of type (AnyClassThatWantsToConnectToThisGraphElement::*)(GraphElementDatataStructurePtrType, int)
public:
void Add(FuncCharPtr* f)
{
FuncVec.push_back(f);
}
void CastData(GraphElementDatataStructurePtrType data, int length){
for(size_t i = 0 ; i < FuncVec.size(); i++){
GraphElementDatataStructurePtrType dataCopy = new GraphElementDatataStructurePtrType[length];
memcpy(dataCopy, data, length);
FuncVec[i](dataCopy, length);
}
}
private:
vector<FuncCharPtr*> FuncVec ;
};
就是我想要的任何如何可能,如何實現它進入我的課堂? (對不起 - 我是一個C++ NUBE =()
爲什麼要使用`memcpy`?爲什麼你使用`新字符[]`而不是`std :: vector`或`std :: string`,並且對於另一種類型的同上? –
GManNickG
2011-01-30 07:54:52
@GMan - 如果您可以提供任何可能使我的課程更好的代碼,我會很高興看到它。但我的觀點是複製指針內容並保留和分享訂閱者的指針。順便說一句,如果提升可以幫助我可以使用它... – Rella 2011-01-30 08:44:42