указать, что это то, что мы хотим «назвать».

я следующая проблема: я пишу простой эмулятор chip8 и имею огромный класс функций интерпретатора, к которым я хотел бы получить доступ через коды операций в качестве ключей, например со словарем. Это должно заменить массивный случай переключения, и я понимаю, что для этой цели неупорядоченная карта является хорошим инструментом для использования.

Этот подход легко работает только с функциями (из-за их статической области действия, я полагаю), но не с классами, из-за той же концепции области действия. Я немного новичок в указателях и самом C ++ и не уверен, как решить проблему (попробовав много вещей, например, сделав функции-члены статическими, указав на экземпляр класса функции и тому подобное - они не скомпилируются). Доступ к iter-> second вообще ничего не возвращает, хотя map.count говорит, что член существует.

#include <cstdio>
#include <unordered_map>

class test{
public:
    test();
    void fptr(void);
};

void test::fptr(void){
    printf("fptr\n");
}

typedef void (test::*Interpreter)(void);
typedef std::unordered_map<int, Interpreter> fmap;

int main(void){
    fmap map;
    int input = 0;

    map.emplace(1, &test::fptr);

    printf("input int to access:\n");
    scanf("%i", &input);

    auto iter = map.find(input);
    if(iter == map.end() ){
        printf("No such function\n");
    }
    else{
        iter->second; //iter->second() will not compile, accessing like this returns nothing
    }

//checks that the emplaced function actually exists
    for (auto& x: {1}) {
    if (map.count(x)>0){ 
        printf("map has %i\n", x);
    }
    else {
        printf("map has no %i\n", x);
    }

    return 0
}

Ответы на вопрос(1)

Ваш ответ на вопрос