我有以下代码段:
template <class T>
int foo(T (*f)()) {
typedef T (*func)();
typedef functor<T, func> F; //this line
// ...
}
如您所见,我使用typedef
作为函数指针(func
),但我想删除它以简化我的代码。我试过这个:
template <class T>
int foo(T (*f)()) {
typedef functor<T, typename f> F;
// ...
}
但那不编译。在一行中为typedef
拼写完整F
的正确方法是什么?
答案 0 :(得分:2)
只需输入f
的实际类型:
typedef functor<T, T(*)()> F;
或者您可以使用decltype
:
typedef functor<T, decltype(f)> F;
或者你可以为这样的事写一个别名:
template <typename T>
using ReturnT = T(*)();
template <typename T>
int foo(ReturnT<T> f) {
using F = functor<T, ReturnT<T>>;
// ...
}