Я хочу использовать memcpy в шаблоне класса. Таким образом, мой шаблон будет ограничен любой ссылкой на C POD (структуру) и char * (и конечно же структуры могут быть объявлены в других независимых классах). Я хочу, чтобы любой класс мог подписать свою функцию (если он имеет уважительные аргументы ввода) для приведения события. Итак, мой класс теперь выглядит так:
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 = ()