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