백엔드 개발 C++ C++ 함수 포인터가 코드 리팩토링을 단순화하는 방법 알아보기

C++ 함수 포인터가 코드 리팩토링을 단순화하는 방법 알아보기

Jun 04, 2024 pm 09:42 PM
c++ 함수 포인터

함수 포인터는 C++의 강력한 기능으로, 함수를 매개변수로 전달하여 코드 재구성의 유연성을 향상시킵니다. 구문적으로 함수 포인터는 별표 대신 꺾쇠 괄호를 사용하여 선언됩니다. 주소 연산자 &를 사용하여 함수 포인터를 만든 다음 배열을 사용하여 함수 포인터를 저장하면 필요에 따라 함수 동작을 동적으로 조정하고 코드 구조를 단순화하며 코드 적응성을 향상시킬 수 있습니다.

探索 C++ 函数指针如何简化代码重构

C++ 함수 포인터 살펴보기: 코드 리팩토링을 위한 강력한 도우미

함수 포인터는 함수를 다른 함수의 매개변수로 전달할 수 있는 C++의 강력한 기능입니다. 이는 필요에 따라 함수의 동작을 동적으로 조정할 수 있으므로 코드 리팩토링에 있어 뛰어난 유연성을 제공합니다.

함수 포인터 구문

함수 포인터 구문은 일반 함수 포인터와 매우 유사하지만 별표 * 대신 꺾쇠 괄호 <>를 사용합니다. 예:

using FunctionPtr = void(int);
로그인 후 복사

위 선언은 정수 매개변수를 받아들이고 void를 반환하는 함수에 대한 포인터 유형을 만듭니다.

함수 포인터 사용법

함수 포인터를 만들려면 주소 연산자 &를 사용할 수 있습니다. 예를 들어, print_number 함수에 대한 포인터를 만들려면: print_number 函数的指针:

int print_number(int n) {
  std::cout &lt;&lt; n &lt;&lt; std::endl;
}

int main() {
  FunctionPtr ptr = &amp;print_number;
}
로그인 후 복사

现在,我们可以使用 ptr 就像使用普通函数一样:

ptr(10);  // 输出:10
로그인 후 복사

代码重构示例

函数指针真正发挥作用的地方是在代码重构中。假设我们有一个 calculate 函数,它可以计算使用不同公式的数值:

double calculate(double a, double b, int formula_id) {
  switch (formula_id) {
    case 1:
      return a + b;
    case 2:
      return a - b;
    case 3:
      return a * b;
    default:
      return 0;
  }
}
로그인 후 복사

如果我们想要添加一个新的公式,我们需要修改 calculate 函数。使用函数指针,我们可以消除这种需要:

using CalculatePtr = double(double, double);

// 创建一个包含所有公式的函数指针数组
std::array&lt;CalculatePtr, 4&gt; formulas = {
    [](double a, double b) { return a + b; },
    [](double a, double b) { return a - b; },
    [](double a, double b) { return a * b; },
    [](double a, double b) { return a / b; }  // 新添加的公式
};

double calculate(double a, double b, int formula_id) {
  if (formula_id &lt; 0 || formula_id &gt;= formulas.size()) {
    return 0;
  }
  return formulas[formula_id](a, b);
}
로그인 후 복사

现在,我们可以通过向 formulas 数组添加新的函数指针来轻松添加新的公式,无需更改 calculaterrreee

이제 일반 함수처럼 ptr을 사용할 수 있습니다.

rrreee코드 리팩토링 예

함수 포인터가 실제로 하는 일 장소는 코드 리팩토링에 있습니다. 다양한 수식을 사용하여 값을 계산할 수 있는 calculate 함수가 있다고 가정해 보겠습니다. 🎜rrreee🎜새 수식을 추가하려면 calculate 함수를 수정해야 합니다. 함수 포인터를 사용하면 이러한 필요성을 없앨 수 있습니다. 🎜rrreee🎜 이제 calculate 함수를 변경하지 않고도 formulas 배열에 새 함수 포인터를 추가하여 새 수식을 쉽게 추가할 수 있습니다. 🎜🎜🎜결론🎜🎜🎜함수 포인터는 C++ 코드 리팩토링에서 중요한 역할을 합니다. 이를 통해 함수를 매개변수로 쉽게 전달하여 동적으로 확장 가능하고 유지 관리가 용이한 코드를 만들 수 있습니다. 함수 포인터를 활용하면 코드 구조를 단순화하고 향후 변경 사항에 대한 코드 탄력성을 높일 수 있습니다. 🎜

위 내용은 C++ 함수 포인터가 코드 리팩토링을 단순화하는 방법 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C++ 동시 프로그래밍에서 데이터 구조의 동시성 안전 설계? C++ 동시 프로그래밍에서 데이터 구조의 동시성 안전 설계? Jun 05, 2024 am 11:00 AM

C++ 동시 프로그래밍에서 데이터 구조의 동시성 안전 설계?

C++ 객체 레이아웃은 메모리에 맞춰 정렬되어 메모리 사용 효율성을 최적화합니다. C++ 객체 레이아웃은 메모리에 맞춰 정렬되어 메모리 사용 효율성을 최적화합니다. Jun 05, 2024 pm 01:02 PM

C++ 객체 레이아웃은 메모리에 맞춰 정렬되어 메모리 사용 효율성을 최적화합니다.

C++ STL에서 사용자 정의 비교기를 구현하는 방법은 무엇입니까? C++ STL에서 사용자 정의 비교기를 구현하는 방법은 무엇입니까? Jun 05, 2024 am 11:50 AM

C++ STL에서 사용자 정의 비교기를 구현하는 방법은 무엇입니까?

Golang과 C++의 유사점과 차이점 Golang과 C++의 유사점과 차이점 Jun 05, 2024 pm 06:12 PM

Golang과 C++의 유사점과 차이점

C++에서 전략 디자인 패턴을 구현하는 방법은 무엇입니까? C++에서 전략 디자인 패턴을 구현하는 방법은 무엇입니까? Jun 06, 2024 pm 04:16 PM

C++에서 전략 디자인 패턴을 구현하는 방법은 무엇입니까?

C++ STL 컨테이너를 복사하는 방법은 무엇입니까? C++ STL 컨테이너를 복사하는 방법은 무엇입니까? Jun 05, 2024 am 11:51 AM

C++ STL 컨테이너를 복사하는 방법은 무엇입니까?

C++ 스마트 포인터의 기본 구현 원칙은 무엇입니까? C++ 스마트 포인터의 기본 구현 원칙은 무엇입니까? Jun 05, 2024 pm 01:17 PM

C++ 스마트 포인터의 기본 구현 원칙은 무엇입니까?

Actor 모델을 기반으로 C++ 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까? Actor 모델을 기반으로 C++ 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까? Jun 05, 2024 am 11:49 AM

Actor 모델을 기반으로 C++ 다중 스레드 프로그래밍을 구현하는 방법은 무엇입니까?

See all articles