2012-05-15 3 views
14

나는 this similar question을 통해 읽고 있었으며 자신이 그 반응에 만족하지 않는다는 것을 알았습니다. 나는 "foo"라고 불리는 간단한 함수를 가지고 있지 않다. 매개 변수가 현명하게 제공되지 않으면 매우 복잡한 기능이 있습니다. 함수가 "하나의 기능,해야 할 한 가지"를 주장하는 의미론적인 정교함에 기대어 기울이는 것보다 자체 규칙을 시행하고 시스템 견고성을 보장하는 것이 나에게 바람직하다고 생각됩니다. 나는 그 질문에 주어진 호의적 인 반응이 특정한 상황의 현실이 아니라 너무 멀리 잡힌 프로그래밍 이상주의를 반영한다고 생각한다.기본 매개 변수로 빈 std :: vector를 지정할 수 있습니까?

는 내가 직면 것은 :

void DoSomethingVeryComplex(const CRect bounds, CPoint startPoint = CPoint(-1,-1)); 

지금이 의미 규칙을 만족하는 일 - 그것은 어떤 것을, 아니 몇 가지 일을하고있다. 그것이하는 일 중 하나는 복잡하고 여러 단계로 진행되지만, 여전히 한 가지입니다.

복잡한 점 때문에 사용자가 범위를 지정하고 함수가 자체 시작점을 결정하도록하는 것이 좋습니다. 고급 사용자는 특정 대체 출발점을 결정하고이를 제공하기 위해 상당한 수학을 원할 수 있지만 사용자는주의해야합니다.

이제 드문 경우지만, 하나가 아닌 몇 가지 출발점을 제공하는 것이 좋습니다. 이것은 관련된 프로세스의 의미 개념에서 아무 것도 변경하지 않습니다. 프로세스가 한 지점에서 이웃, 이웃의 이웃으로 확산되는 과정이기 때문입니다. 따라서 많은 지점에서 시작하는 것은 자연스러운 확장입니다.

따라서, 사용자가 지정한하는 것을 선호합니다 : 벡터가 비어있는 경우, 함수가 이전과 시작점을 결정하는 벡터의 모든 지점이있는 경우

void DoSomethingVeryComplex(const CRect bounds, 
          const std::vector<CPoint> startPoint /* = empty" */); 

하고, 그들은으로 사용되도록 시작 지점.

빈 배열을 기본 매개 변수로 지정할 수있는 C++ 구문이 있습니까?

const std::vector<CPoint> startPoint = {} 

그 전에이 작동합니다 :

const std::vector<CPoint> startPoint = std::vector<CPoint>() 

이 모두 빈 벡터를 생성하는 기본 생성자를 호출 C에서

답변

23

그것은 간단한의 11 ++. 적절한 구문을 채우는 한 동일한 구문을 사용하여 다른 생성자를 호출 할 수 있습니다. 당신이 당신의 자신의 클래스, here's a link on how it works에 대한 기능의 종류를 원하는 경우에

const std::vector<CPoint> startPoint = {CPoint(1, 2), CPoint(4, 5), CPoint(3, 9)} 

:

//this one has 5 default-constructed CPoints 
const std::vector<CPoint> startPoint = std::vector<CPoint>(5) 

는 C++ 11에서, 당신도 기본 벡터를 작성 할 수 있습니다.

+0

나를 이길. +1 – Martol1ni

+0

감사합니다. 나는 그것을 할 수있는 방법이 있어야한다는 것을 알고있었습니다. 나는 실제로 그것을하고 싶지 않다 - 기본 매개 변수를 가지지 않는 것이 더 명확 할 수도 있지만, 기존의 기본 매개 변수를 제거하면 변경할 기존 코드가 있습니다. – omatai

+0

@omatai, 참으로 오래된 코드를 사용하여 표준에 도달하는 것이 좋습니다. – chris

관련 문제