c++中的函數指針,靜態函數法

最近在用QT學習opencv
這裏寫圖片描述

點擊菜單中的響應選項,執行相應的函數。

爲了簡化代碼,使用勒函數指針的方法:

void MainWindow::on_menu_laplace_triggered(bool)
{
    mydebug ("laplace");
    imgPro(myOpencv::imgProLaplace);
}
void MainWindow::on_menu_canny_triggered (bool)
{
    mydebug ("canny");
   imgPro(myOpencv::imgProCanny);
}

在窗體類中聲明:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();
    MainWindow(const QString &fileName);

private:
    void createActions();
    void createToolBars();
    void createMenus();
    void createDockWidget();

    void imgPro(cv::Mat (*prccessFunc) (cv::Mat));

我設計了兩個類,一個只負責用戶界面的佈局和操作,一個只負責opencv的算法。在這兩個類間傳遞函數指針會報錯,解決辦法是把要調用的函數聲明爲靜態函數。

class myOpencv
{
public:
    myOpencv();

    QImage  cvMat2QImage(const cv::Mat& mat);
    cv::Mat QImage2cvMat(QImage image);

    static cv::Mat imgProHistogramEqualization (cv::Mat srcMat);
    static cv::Mat imgProHistogramNormalization (cv::Mat srcMat);
    static cv::Mat imgProSobel (cv::Mat srcMat);
    static cv::Mat imgProLaplace(cv::Mat srcMat);
    static cv::Mat imgProCanny(cv::Mat srcMat);
    static cv::Mat imgProFilter (cv::Mat srcMat);

};

從c過度到c++,總會覺得c的簡潔,c++的怪異,但時間長了就會體會到c++的方便,網上還有其他方法解決類之間函數指針傳遞的問題,但是我並沒弄得清楚,於是用勒最簡單的方法,用靜態函數吧。

發佈了40 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章