如何使用typename而不是typedef?

时间:2015-05-30 17:08:06

标签: c++ templates c++11 typedef typename

我有以下代码段:

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的正确方法是什么?

1 个答案:

答案 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>>;
    // ...
}