2016-04-25 32 views
1

是否有方法從模板類中提取typedef?例如,這是我想要做的:從模板類中提取typedef/using定義

template<typename T, typename... Args> 
class Foo{ 
public: 
    typedef T(*Functor)(Args...); 
    Foo() = default; 
}; 

template<typename T, typename... Args> 
Foo<T, Args...> make_foo(T(*f)(Args...)){ 
    return Foo<T, Args...>; 
} 

int bar(int i){ 
    return i * 2; 
} 

using type = make_foo(bar)::Functor; 

我不能這樣做。但是,我可以這樣做:

using type = Foo<int, int>::Functor; 

這種失敗的目的對我來說。有沒有什麼方法可以包裝一個函數,以便我可以以類型形式提取它?

回答

5

decltype會不夠好?

using type = decltype(make_foo(bar))::Functor; 
+0

哇,很明顯...謝謝。 – Goodies

4

使用decltype

template<typename T, typename... Args> 
class Foo{ 
public: 
    typedef T(*Functor)(Args...); 
    Foo() = default; 
}; 

template<typename T, typename... Args> 
Foo<T, Args...> make_foo(T(*f)(Args...)){ 
    return Foo<T, Args...>{}; // Small compilation error fixed here. 
} 

int bar(int i){ 
    return i * 2; 
} 

using type = decltype(make_foo(bar))::Functor; 

這個操作符返回它被饋送以所述表達式的類型。