我有一個我稱之爲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
函數指針對象*&
這當然不符合我的類中的任何函數調用。
這是我的問題的關鍵。我不確定如何在使用模板時傳遞指向我的hash
類中的void insert_to_hash()
的函數指針。我顯然做錯了。
爲什麼當你有「類型參數」時說「非類型參數」? – 2012-02-29 06:26:13
@KerrekSB上面我有'array_type',它沒有綁定到特定類型,比如'int'或'double',因此我使用非類型。這是不正確的語法嗎? – 2012-02-29 06:28:01
@Nic'N'在這個例子中是一個非類型參數:'template struct foo {char x [N]; };'。用'typename'(或'class')聲明的模板參數是一個類型參數。 –
2012-02-29 06:33:44