0

簽名f它可以確定f的簽名是這樣的(說讓我們把它放在一個元組):確定給定<code>some_type</code>有一個成員函數重載成員函數

template <typename R, typename T, typename... A> 
std::tuple<R, A...> signature_of_impl(R (T::*)(A...)); 

template <typename T> 
using signature_of_member_f = decltype(signature_of_impl(&T::f)); 

struct some_type 
{ 
    int f(char, float); 
}; 

using some_type_f_signature = signture_of_member_f<some_type>; 

這顯然失敗嚴重如果f過載。 some_type內是否可以確定f所有現有過載的簽名?

+0

你是什麼意思「確定所有現有重載簽名」?你想迭代它們? –

+0

@AndyProwl我想得到一些將包含這些信息的類型,比如上面的簽名元組的元組。然後,如果需要,我可以迭代它。 –

+0

你肯定不能這樣做:-( –

回答

0

您可以向編譯器「詢問」特定函數的類型。

但在C++中沒有reflection,您無法查詢一類存在什麼樣的功能,甚至在同一功能的重載。

+0

反射意味着運行時查詢,我想要編譯時的查詢,C++允許在複雜的迂迴方式中做起初看起來不可能的事情,我希望有這種可能 –

+0

沒錯,但編譯器「技巧」獲取關於類的信息始終是明確的,甚至SFINAE也要求你明確地表達SFINAE,並選擇並設置正確的類型。 –