【发布时间】:2014-05-30 13:18:54
【问题描述】:
SalesMap.h 摘录-
typedef BST<Sales> BinarySearchTree;//type defined for Sales_Map construction
typedef map<Date, BinarySearchTree> sales_map;//type defined for map construction
sales_map Sales_Map;
SalesMap.cpp 摘录-
Highest 和 SetHigh 都是公开的
void SalesMap::Highest(){
void (SalesMap::*SetHighPTR)(Sales);//create non-static function pointer
SetHighPTR = &SalesMap::SetHigh; //assign address of function void SetHigh(Sales sales)
//it is an iterator to a specific element in Sales_Map
it->second.InSearch(&SetHighPTR); // pass SetHigh into BST object function InSearch
}
void SalesMap::SetHigh(Sales sales)//test input sales object against global highprice variable
{
double price = sales.GetPrice();
if(price < high)
high = price;
}
BST.h
Public:
void InSearch(void (*f)(T) );//calls recursive InSearch function
Private:
void InSearch(node*& leaf, void (*f)(T) );
template <class T>//public InSearch
void BST<T>::InSearch( void (*f)(T) )
{
InSearch(root, (*f));
}
template <class T>//Private InSearch
void BST<T>::InSearch(node*& leaf, void (*f)(T))
{
if(leaf != NULL)
{
InSearch(leaf->left);
(*f)(key);
InSearch(leaf->right);
}
}
我正在尝试在 BST.h 中创建回调函数。 我不断收到以下错误:
error C2664: 'void BST<T>::InSearch(void (__cdecl *)(T))' : cannot convert parameter 1 from 'void (__thiscall SalesMap::* )(Sales)' to 'void (__cdecl *)(T)'
我不确定该问题所需的正确语法,并且无法弄清楚我应该做什么以及在哪里做。 任何帮助将不胜感激
【问题讨论】:
-
我建议您重新编辑您的问题并发布一个可重现的小问题示例。
-
函数指针不同于方法指针。
-
boost.bind解决了这个问题 -
std::bind也很感兴趣。
标签: c++ callback function-pointers binary-search-tree non-static