2024. 8. 11. 10:29ㆍ프로그래밍 (확장)/More C++ Idioms
출처: https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Named_Parameter
More C++ Idioms/Named Parameter - Wikibooks, open books for an open world
From Wikibooks, open books for an open world Jump to navigation Jump to search Simulate named (key-value pair) parameter passing style found in other languages instead of position-based parameters. Method chaining, Fluent interface When a function takes ma
en.wikibooks.org
인자의 이름을 명시적으로 지정하여 가독성과 유지보수성을 높이는 방법으로 특히 함수에 많은 인자가 있을 때, 특정 인자만 선택적으로 설정하고 싶을 때 사용한다.
(Python과 같은 언어들을 보면 이미 함수 호출 시 function(arg_name=value)와 같이 특정인자를 지정해서 값을 넣을 수 있다. 하지만 C++의 경우 특정 인자에 값을 설정할 수 없고, 인자의 순서대로 값을 설정해야 한다.)
핵심
- 함수 호출 시 인자의 순서에 구애받지 않고 인자의 이름을 명시적으로 지정해서 가독성을 높인다.
- 많은 인자를 가지는 함수에서 순서가 헷갈리지 않고 명시적이다.
- 메서드 체이닝과 함께 사용되고 각 인자에 대해 별도의 setter 함수를 제공하고, 마지막에 주로 최종 객체 생성 또는 작업을 하도록 구성한다.
예시
(https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Named_Parameter 참조)
#include <iostream>
class MyParams
{
public:
int param1;
float param2;
char param3;
MyParams() : param1(0), param2(0.0f), param3('a') {} // 기본값으로 초기화.
MyParams& setParam1(int i) { param1 = i; return *this; } // param1 setter.
MyParams& setParam2(float f) { param2 = f; return *this; } // param2 setter.
MyParams& setParam3(char c) { param3 = c; return *this; } // param3 setter.
static MyParams create() {
return MyParams();
}
void print() const {
std::cout << param1 << " " << param2 << " " << param3 << std::endl;
}
};
int main (void)
{
// Parameter를 설정하고 print 해보자.
MyParams::create().setParam1(10).setParam2(10.1f).setParam3('Z').print();
}
10 10.1 Z
'프로그래밍 (확장) > More C++ Idioms' 카테고리의 다른 글
More C++ Idioms (79. SFINAE - Substitution Failure Is Not An Error) (0) | 2024.08.28 |
---|---|
More C++ Idioms (44. Int-To-Type, Int2Type) (0) | 2024.08.05 |
More C++ Idioms (85. Tag Dispatching) (0) | 2024.08.04 |
More C++ Idioms Site (0) | 2024.08.04 |