【发布时间】:2018-05-01 21:38:35
【问题描述】:
我这样定义了一个类模板X:
template <typename T>
using Func = void(T);
template <typename T, Func<T> F>
class X { ... };
现在我可以像这样使用X 类:
void func(int i);
X<int, &func> x;
在x 的声明中重复int 类型对我来说似乎是多余的。有没有办法可以自动推断?我的意思是我想要一个类型模板Y,它可以通过Y<&func> 使用,等于X<int, &func>,自动推导出int。
我尝试了很多,甚至定义了疯狂的模板函数并使用decltype,但似乎没有办法在命名&func之前删除T。
更新:我使用 MSVC 2017.5 似乎是一个限制,这使我无法按照 Kerrek 的建议在模板参数列表中使用 auto。我想知道是否有一些“hack”可以在没有此功能的情况下获得相同的效果。
【问题讨论】:
-
在 C++17 之前使用的典型“hack”人涉及一个辅助函数声明、
decltype和一个宏。