【发布时间】:2017-02-28 15:55:04
【问题描述】:
我在处理模板时偶然发现了一个困扰我的小问题。这是一个例子:
template<class _returnType, _returnType (*_function)()>
_returnType aliasGetter() { return _function(); }
int getCoolNumber() { return 42; }
int main()
{
std::cout << aliasGetter<int, &getCoolNumber>(); //42
}
此代码有效(http://cpp.sh/,如果您想尝试它),但是由于我将函数指针作为模板参数,我不应该需要 _returnType,它就在函数签名中,问题是,无论如何我努力尝试,我找不到摆脱这个额外模板参数的方法。
我怎样才能让aliasGetter 只接受一个模板参数(一个指向别名的getter 的指针)?
如果这不可能,为什么不呢?
【问题讨论】:
-
使用单个模板参数并依赖模板参数推导怎么样?
-
@WhiZTiM 这需要在运行时将函数指针传递给调用。
-
您需要它,因为您的第二个模板参数依赖于它。你可以用functionalcpp.wordpress.com/2013/08/05/function-traits 建立一些东西,但我怀疑你会保存模板参数。