У меня есть шаблонный класс, который я назвал hash
.Мой шаблонный класс hash
принимает три нетиповых параметра.Определение класса hash
приведено ниже:
template <typename array_type, typename ptr_to_hash, typename hash_type>
class hash
{
public:
//default constructor
hash();
/* Overloaded Constructors */
// instantiates a hash object and the pointer to the hash_function
hash(const int&, std::ifstream&, const char*, ptr_to_hash*);
/* Methods for Hash Class */
void insert_to_hash();
// some other stuff
};
Как видите, я хочу, чтобы мой нетипичный параметр ptr_to_hash
был указателем на мою функцию void insert_to_hash
.Реализация вышеупомянутого перегруженного конструктора выглядит следующим образом:
template <typename array_type, typename ptr_to_hash, typename hash_type>
hash<array_type, ptr_to_hash, hash_type>::hash(const int& dim, std::ifstream& in, const char* file, ptr_to_hash* hash_ptr)
{
// do some stuff to allocate from file
// point function pointer to correct function
hash_ptr = &this->insert_to_hash();
}
Теперь в основном я пытаюсь создать указатель на мою хэш-функцию.Поэтому я сначала создаю указатель на функцию void
, а затем передаю его моему перегруженному конструктору:
int main()
{
// create void function pointer
void (*foo)();
//create hash obj. from data read in from argv[1]
hash< member<int>, void(*), member<int> > awesome( count_lines(in,file), in, file, foo);
}
В приведенном выше примере member<int>
является структурой шаблона, а count_lines()
просто возвращает целочисленное значение для суммы.строки в файле.Когда я пытаюсь сделать это, я получаю ошибку
no matching function for call to ‘hash<member<int>, void*, member<int> >::hash(int, std::ifstream&, const char*&, void (*&)())
Когда я смотрю на ошибку выше, я, кажется, передаю свой объект-указатель на функцию foo
как *&
, который, конечно, не соответствует ни одной функциизвонки в моем классе.
В этом суть моей проблемы.Я не уверен, как передать указатель на функцию, которая указывает на мой void insert_to_hash()
в моем классе hash
при использовании шаблонов.Я явно делаю это неправильно.