[問題] 關於C++的函數指標陣列實作

看板C_and_CPP作者 (ウィンディ@イージス)時間7年前 (2017/01/19 16:41), 編輯推噓3(304)
留言7則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Windows 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VC++ (VS 2015社群版) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) DxLib 問題(Question): 現在是我在遊戲中要實做敵人路徑和子彈發射路徑, 但我發覺用switch的話程式碼會越做越大, 所以我現在想要照以下網頁講的範例做一個函數指標陣列。 http://dixq.net/rp/12.html 但問題來了,這是C下面的函數指標陣列。 我用同樣的方法在類別內實作時編輯器會出現錯誤。 #include <cmath> #include "DxLib.h" class ENEMY_SAKO { ... void MovePattern01(); void MovePattern02(); void MovePattern03(); void MovePattern04(); void(*EnemyMovePattern[])(void) = { MovePattern01, MovePattern02, MovePattern03, MovePattern04 }; ... } 在黃色的地方編輯器會顯示 「類型"void(ENEMY_SAKO::*)()"的值無法用來初始化類型"void(*)()"的實體。 請問這大概是什麼原因造成的呢?? 有沒有別的方式可以做到一樣的效果? 謝謝!! 註: 各MovePattern的程式碼如下: /*Move Pattern Garage*/ void ENEMY_SAKO::MovePattern01() { double player_x, player_y; (GAMEPLAY::Instance())->GetPlayerPosition(&player_x, &player_y); move_angle = atan2(player_y - y, player_x - x); moveSpeed = 1.5; } void ENEMY_SAKO::MovePattern02() { move_angle = M_PI_4 / 2; moveSpeed = 1.0; } void ENEMY_SAKO::MovePattern03() { } void ENEMY_SAKO::MovePattern04() { move_angle = M_PI_2; moveSpeed = 1.2; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.49.111 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1484815318.A.0E1.html

01/19 17:35, , 1F
編譯器說的很清楚 型別不符
01/19 17:35, 1F

01/19 17:35, , 2F
method其實有隱含參數this 只是你看不到
01/19 17:35, 2F

01/19 17:36, , 3F
01/19 17:36, 3F

01/19 20:31, , 4F
都用VS2015了 改用lambda來做吧
01/19 20:31, 4F

01/21 01:30, , 5F
有策略模式 有std::function 為何要用Function pointer
01/21 01:30, 5F

01/23 21:04, , 6F
延續樓上,effective C++ 條款35可參閱看看
01/23 21:04, 6F

01/24 09:45, , 7F
再延續樓上C++11出來後 effective modern c++ item 34
01/24 09:45, 7F
文章代碼(AID): #1OW7lM3X (C_and_CPP)