함수에 대한 C++ 포인터

얘들 아! 나는 한동안 아무 것도 쓰지 않았고, 이 포스트도 매우 짧을 것이다. 그렇긴 하지만, 특히 C/C++를 정기적으로 다루어야 하는 경우(그리고 학교에서 OOP와 함께 C++를 배운 경우 더욱 가능성이 높음) 이를 통해 큰 이점을 얻을 수 있다고 생각합니다.

어쨌든 Google의 암호화 라이브러리 BoringSSL에서 발췌한 내용을 보여드리겠습니다. 함수에 대한 포인터를 사용하는 좋은 예입니다.

여기있어!

#include <iostream>
#include <string>

typedef void (*tool_func_t)();

struct Tool {
  const char *name;
  tool_func_t func;
};

void info_func() { std::cout << "You selected info" << std::endl; }

void help_func() { std::cout << "You selected help" << std::endl; }

const Tool kTools[] = {
    {"info", info_func},
    {"help", help_func},
};

tool_func_t find_tool(const std::string &name) {
  for (size_t i = 0;; i++) {
    const Tool &tool = kTools[i];
    if (tool.func == nullptr || name == tool.name) {
      return tool.func;
    }
  }
}

int main(int argc, char **argv) {
  if (argc == 1) {
    std::cout << "You didn't povide any arguments" << std::endl;
    return 1;
  }
  tool_func_t tool = nullptr;
  tool = find_tool(argv[1]);
  if (tool == nullptr) {
    std::cout << "You can either get info, or ask for help!" << std::endl;
    return 2;
  }
  tool();
  return 0;
}


핵심 단계는 함수의 서명을 정의하는 typedef 선언입니다(이 예에서는 인수를 사용하지 않고 void를 반환함). 그 후에는 이 서명이 있는 함수로 작업할 때 유연성이 뛰어납니다.

물론 www.learncpp.com 에서 이에 대한 자세한 내용을 읽을 수 있습니다.

좋은 웹페이지 즐겨찾기