【发布时间】:2016-08-26 11:10:56
【问题描述】:
将非模板函数分配给function 类型的变量会选择
基于签名的右重载:
// OK
void fn(int val) {}
void fn(int val, int val2) {}
void function(int) foo = &fn;
但是,我似乎无法对模板函数做同样的事情:
// template fn!2 matches more than one template declaration
void fn2(T)(T val) {}
void fn2(T)(T val, T val2) {}
void function(int) foo2 = &fn2!int;
如果我可以扩展fn2!int,它似乎相当于
第一种情况。
有什么方法可以让我想要的fn2 过载?
请注意,这是在模块级别声明的,所以我不能(据我所知)
使用__traits(getOverloads)。
【问题讨论】:
-
现在我正在使用声明
void _fn2(T)(T val)的hacky 解决方案,它只是转发到fn2的单参数重载。
标签: templates metaprogramming d