簡體   English   中英

函數可以接受靜態函數指針作為參數嗎?

[英]Can functions accept static function pointers as arguments?

這是一個很好的例子:我正在嘗試重載OpenGL的glutMouseFunc因此它可以接受我選擇的命名空間和類函數。 特別是Init::DisplayInit::mouse ,它是靜態的。 問題是,這可能嗎? 如果是這樣,這是如何實現的?

我的實施

void glutMouseFunc(void (Init::DisplayInit::*mouse)(int, int, int, int)) {
    (*mouse);
}

實施中的錯誤

..\OpenGL_03\/displayinit.h:27: error: variable or field 'glutMouseFunc' declared void
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: void value not ignored as it ought to be

注意,我把函數的聲明放在同一個文件的頭文件中。 我還確保函數的聲明定義都位於名稱空間聲明之外(它包含了大部分文件,每個文件)。 如圖所示,第一個錯誤之一將函數讀作變量或字段(???)。

這不是定義glutMouseFunc的合理方法。 它不應該立即調用回調,它應該為以后保存指針(當鼠標活動發生時)。

調用GLUT提供的版本,並傳遞函數的地址:

#include <GL/glut.h>
glutMouseFunc(&Init::DisplayInit::mouse);

靜態成員函數與普通函數指針兼容。

標題問題的答案是“是的;函數可以接受靜態函數指針作為參數”。

您沒有在使用它的函數中指向函數參數規范的指針中指定名稱空間或類:

void glutMouseFunc(void (*mouse)(int, int, int, int)) {
    (*mouse)(1, 2, 3, 4);
}

您可以在函數調用中指定命名空間或類:

glutMouseFunc(Init::DisplayInit::mouse);

暫無
暫無

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

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