[英]Using decltype to declare the entire function type itself (not pointer!)
所以我在頭文件中有一個具有特定簽名的函數,我想在類中聲明另一個具有完全相同簽名的函數, 而無需再次輸入參數,當然,希望沒有宏...成員函數應該顯然還有一個額外的隱藏參數, this
指針(因為它不是靜態成員函數)。
現在,我確實驚訝的是,下面的技巧/訣竅在GCC和ICC 的作品 ,但我不知道這是否是“合法”的C ++。 我不是特別關注合法性, 如果它是一個支持的擴展 ,但不幸的是我不希望它打破編譯器版本更新,因為有些人決定任意阻止這個有用的功能,因為標准說“不”(那種東西說實話真讓我煩惱。
這就是我的意思:
// test.hpp
int func(int x) { return x; }
struct foo
{
decltype(func) fn; // <-- legal?
};
int test()
{
return foo().fn(6);
}
// then in test.cpp
int foo::fn(int x) { return x + 42; }
這有效 (與GCC和ICC),但我不知道它是否在標准中是“合法的”。 我要求確保它是合法的,它不會在將來突然停止工作。
(如果它不合法並且您想將其報告為錯誤,請將其標記為建議,使其成為合法的編譯器擴展而不是將其刪除......)
基本上,它與聲明int fn(int x);
在結構中,這就是它當前的工作方式。
如果你問我一個用例:它是為另一個自由函數聲明一個包裝器成員函數,它在將它傳遞給free函數之前用this
指針做了一些事情。 顯然,它的參數必須完全匹配。 同樣,我不想再次輸入參數。
這看似合法; 但根據定義,你必須重新輸入。 考慮使用完美轉發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.