将显式指定的函数模板重载作为模板参数传递的正确语法是什么?
What's the correct syntax for passing an explicitly specified function template overload as a template parameter?
考虑以下两个函数模板
template<class T> void g(std::vector<T>&) {}
template<class T> void g(std::list<T>&) {}
连同中间函数
template<class Fct, class Container> void h(Fct&& f, Container& c)
{
f(c);
}
如何使用 g
的显式实例化调用 h
(如 this answer 中的第一个解决方案)?我试过这些
std::vector<int> vec;
h(g<void(std::vector<int>&)>, vec); // Error, can't deduce template paramter Fct
h(g<void<int>(std::vector<int>&)>, vec); // Same problem
但现在我缺乏尝试替代语法的想象力(我知道我可以将调用包装在 lambda 或函数对象中,但这不是我想在这里做的)。感谢您的建议!
好的,我自己想出来了:
h<void(std::vector<int>&)>(g, vec);
对于显式实例化哪个函数模板感到困惑,错误地选择了 g
而不是 h
。
考虑以下两个函数模板
template<class T> void g(std::vector<T>&) {}
template<class T> void g(std::list<T>&) {}
连同中间函数
template<class Fct, class Container> void h(Fct&& f, Container& c)
{
f(c);
}
如何使用 g
的显式实例化调用 h
(如 this answer 中的第一个解决方案)?我试过这些
std::vector<int> vec;
h(g<void(std::vector<int>&)>, vec); // Error, can't deduce template paramter Fct
h(g<void<int>(std::vector<int>&)>, vec); // Same problem
但现在我缺乏尝试替代语法的想象力(我知道我可以将调用包装在 lambda 或函数对象中,但这不是我想在这里做的)。感谢您的建议!
好的,我自己想出来了:
h<void(std::vector<int>&)>(g, vec);
对于显式实例化哪个函数模板感到困惑,错误地选择了 g
而不是 h
。