С учетом отредактированной декларации
template<class KEY, class VALUE, class HASH_FUNCTION,
class COMPARATOR_FUNCTION, class GREATER_THAN_FUNCTION>
bool Test3(size_t szCount, double dLoadFactor, vector<KEY>& vVals,
const HASH_FUNCTION& hf, const COMPARATOR_FUNCTION& cf,
const GREATER_THAN_FUNCTION& gf);
и комментарий: V
используется функцией Test3. Могу ли я сказать компилятору тип V
?
Проблема с Test3(1000, 0.7f, vVals, sh, cf, gf);
заключается в том, что компилятор не может определить аргумент шаблона VALUE
. Но вы можете явно перечислить аргументы шаблона для имени функции следующим образом:
Test3<const char*, value_type>(1000, 0.7f, vVals, sh, cf, gf);
Здесь первые два аргумента шаблона KEY
= const char*
и VALUE
= value_type
приведены в <
угловых скобках >
, а остальные могут быть получены компилятором.
Если вы измените порядок KEY
и VALUE
в объявлении шаблона, вы можете пропустить указание KEY
и сделать вывод:
template<class VALUE, class KEY, class HASH_FUNCTION,
class COMPARATOR_FUNCTION, class GREATER_THAN_FUNCTION>
bool Test3(size_t szCount, double dLoadFactor, vector<KEY>& vVals,
const HASH_FUNCTION& hf, const COMPARATOR_FUNCTION& cf,
const GREATER_THAN_FUNCTION& gf);
// ...
Test3<value_type>(1000, 0.7f, vVals, sh, cf, gf);