我只是偶然发现了一个小问题,这个问题在处理模板时给我带来了困扰。这里有一个例子:模板函数指针作为模板参数
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
@WhiZTiM这需要在运行时将函数指针传递给调用。 –
您需要它,因为您的第二个模板参数依赖于它。你可以用https://functionalcpp.wordpress.com/2013/08/05/function-traits/建立一些东西,但我怀疑你会保存一个模板参数。 – knivil