我有我試圖轉換爲一個void *以下TR1 ::函數原型:鑄造一個TR1 ::函數爲void *
typedef std::tr1::function<cv::Mat (const cv::Mat,const void*)> preprocessingFunc;
在此功能,我將其存儲在一個向量包含結構表示的功能,功能類型和指針:
void ImageGraph::addNode(preprocessingFunc func)
{
NodeFunction nodeFunction = { typeid(func), (void*)func };
//nodes.push_back(nodeFunction);
}
的錯誤,我得到:
ImagePipeline.cpp: In member function ‘void IP::ImageGraph::addNode(IP::preprocessingFunc)’: ImagePipeline.cpp:32: error: invalid cast from type ‘IP::preprocessingFunc’ to type ‘void*’ /usr/include/c++/4.2.1/typeinfo:135: error: ‘std::type_info::type_info(const std::type_info&)’ is private ImagePipeline.cpp:32: error: within this context
是有可能將此函數類型轉換爲指針(void *)?如果沒有,是否有更好的方法來實現我正在做的事情?
爲了清晰起見,我在稍後的日期存儲函數指針以調用,它們目前有3種類型的函數指針,但是我想將它們全部存儲在同一個向量中。
編號'tr1 :: function'是一個類,而不是函數指針。對象'func'不能變成'void *'。 –
@BoPersson:我不追隨; 'void *'可以保存包含'tr1 :: function'對象的任何對象的指針。混合代碼和數據指針會很麻煩,但是你正確指出的'std :: function'不是函數指針。 (它_一個)。 – MSalters