인사, 모두들!연결 방법 및 임시 변수를 명확히하십시오
나는 "원"(예를 들어)에 대한 포인터를받는 클래스를 가지고 있으며, "연결"방법을 통해 속성을 조정합니다. 이런 식으로 뭔가 :
class CCircleSetter
{
public:
explicit CCircleSetter(CCirclePtr circle) : m_circle(circle)
{
}
CCircleSetter & Radius(int radius)
{
if (m_circle) m_circle->SetAttribute("radius", radius);
return *this;
}
CCircleSetter & Center(CPoint center)
{
if (m_circle) m_circle->SetAttribute("center", center);
return *this;
}
operator bool() const
{
return (m_circle != NULL);
}
private:
CCirclePtr m_circle;
};
지금이 코드가 합법적인지 여부를 궁금해 :
한편으로if (CCircleSetter(myCircle).Radius(10).Center(myPoint))
{ ... }
, 내가 표현 "만일"내부에서 생성 된 임시 객체가, 때까지 살 것이라고 생각 이 표현의 끝. 따라서 "반경"과 "중심"에 대한 호출은 합법적입니다. 그러나 다른 한편으로는 임시 변수에 대한 참조를 사용하는 것은 정의되지 않은 동작이며 "this"가 임시 인 경우 (* this)를 사용하여이 종류의 작업을 수행하고있는 것처럼 보입니다. 그것은 나에게 몇 가지 의심을 안겨주므로, 제발, 분명히하십시오. 감사!
"체인 연결 방법을" 이것은 [유창한 인터페이스] (http://en.wikipedia.org/wiki/Fluent_interface)에서의 시도 인 것 같습니다. –
링크를 제공해 주셔서 감사합니다. 위키에서 : "유창한 인터페이스는 단순한 메소드 연쇄를 필요로합니다."=) – SadSido