在代码中解释它更容易。
示例
我有一个哈希图数据结构,其模板如下: -
template<class K,class T,long (* K_hashingFunction)(K&)> class AMap{
// ^ Key ^Value ^ Hashing function for Key
}
它按预期工作。
然后我想声明一个迭代器类: -
template<class K,class T,long (* K_hashingFunction)(K&)> class AMap_iterator{
AMap<K,T, ????? >* mapPtr=nullptr; //How should I declare its type?
}
问题:将 mapPtr 声明为字段的正确方法是什么?
AMap<K,T, K_hashingFunction >* mapPtr=nullptr; //?
AMap<K,T, &K_hashingFunction >* mapPtr=nullptr; //?
AMap<K,T, *K_hashingFunction> * mapPtr=nullptr; //?
所有这些都给我一个智能感知错误:“不能替换模板参数”
答案 0 :(得分:2)
这是正确的:
AMap<K,T, K_hashingFunction >* mapPtr=nullptr;
我们只是复制所有模板参数 - 无需修改。请注意,取消引用函数指针也应该有效,因为函数只会衰减回指针。
由于注入了类名,我们可以简化为:
AMap* mapPtr = nullptr;
答案 1 :(得分:1)
只是为了补充Barry的答案。
AMap<K,T, &K_hashingFunction >* mapPtr=nullptr;
不正确,因为表达式&K_hashingFunction
会返回指向函数指针的指针。不是指向函数的指针。