簡體   English   中英

使用指針來對沒有typedef的函數進行指針操作?

[英]Using a pointer to function pointers without typedef?

我正在嘗試使用在運行時確定長度為double* (*func)(double*, double)類型的函數指針的集合。 我可以使用typedef

typedef double* (*func)(double*, double);

...

func* functions = new func[5];

我知道typedef是執行此操作的“正確”方法,但我想知道是否存在不使用typedef 我已經找到的有關此類事物的所有信息僅使用函數指針的形式,而不是函數指針的形式。 我認為貼花

double* (**functions)(double*, double);

會是正確的,但我似乎無法弄清楚如何使用new初始化這樣的事情。

double *(**functions)(double *, double) = new (double *(*[5])(double *, double));

要在new表達式中使用抽象函數類型(或指向函數的指針),您需要將抽象類型放在括號內-從C ++規范的5.3.4開始:

new :: new new ( ) :: new

new-type-id無法表示功能類型。

如果您試圖自動生成(或混淆)代碼,了解C ++語法規范的詳細信息將非常有用,但是對於您希望人類閱讀的真實代碼,您應該只使用typedef。

std::vector<double*(*)(double*, double)> function_table;

但是拋開人為的約束:

typedef double *(*f_ptr)(double*, double);
std::vector<f_ptr> function_table;

真正的答案在評論之一中給出:

double *(**fns)(double *, double)

將聲明一個指向函數指針的指針,該指針返回一個double * ,參數為double *double

但是,即使在它成為指向指針的指針之前,也很難閱讀,所以我不相信您會這樣做只是為了節省一點點輸入...( typedef和一個名稱)。

當然,由於這是C ++,因此使用

std::vector<std::function<double *(double *, double)>> fns;

將是要做的“正確”事情,甚至

std::vector<std::function<std::vector<double>(std::vector<double>, double)>> fns;`
  • 如果嘗試初始化變量函數,會收到錯誤消息嗎? 如果是這樣,則需要將初始化強制轉換為。
  • func *功能=(func *)新func [5];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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