簡體   English   中英

使用decltype聲明整個函數類型本身(不是指針!)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM