将显式指定的函数模板重载作为模板参数传递的正确语法是什么?

时间:2018-06-26 08:25:49

标签: c++ templates overload-resolution

请考虑以下两个功能模板

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);
}

如何使用显式实例化h调用g(就像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或函数对象中,但这不是我想要的)。感谢您的建议!

1 个答案:

答案 0 :(得分:1)

好吧,我自己弄清楚了:

g

对于要显式实例化哪个函数模板并错误地选择h而不是@OneToMany(mappedBy = "a", cascade = CascadeType.ALL) Set<B> bs; 感到困惑。