2013-08-09 2 views
3

C++에서 표현식을 축약하는 방법이 있습니까? 예를 들어, 만약 내가이표현식을 식별자로 축약합니다.

ui.myplot->graph(0) 

같은 것을 가지고 내가 대신

int a = ui.myplot->graph(0)->val; 

처럼가는 나는이

int a = mygraph->val; 
을 할 수 있도록, mygraph로 줄여 싶습니다

typedef는 여기에서 일하지 않을 거예요. 어떤 제안?

+0

에 대한 "별명"와 같은 지금

auto& myParticularGraph = ui.myplot->graph(0); int a = myParticularGraph->val; 

이됩니까? – librik

+0

'auto & mygraph = ui.myplot-> graph (0); (또는'const'에 대해 좀 더 일반화하고 싶다면'decltype') 가능성있는 유일한 논리적 솔루션처럼 보입니다. – chris

+3

@librik : 최대한 많이 정의하지 마십시오. 유형이 강하지는 않으며 모든 종류의 예상치 못한 구문 문제를 나타낼 수 있습니다. – KillianDS

답변

2

참조 사용 :이 값을 변경해야하는 경우

const auto& mygraph = ui.myplot->graph(0); 

또는 변경 가능한 참조 : 참조가 별칭을 사용하도록 설계

auto& mygraph = ui.myplot->graph(0); 

을; 이것이 매개 변수 전달에서 가장 자주 발생한다는 사실은 오해의 소지가 있습니다. 객체의 중첩 된 필드와 같이 복잡한 표현식의 결과를 별칭으로 사용하기 위해 로컬로 사용할 수도 있습니다.

+0

'const auto &'또는'auto &'대신'auto &&'를 사용하십시오. 그렇지 않으면 constness를 변경합니다. – nosid

+0

@nosid : 필자는'auto & x = y;'y'가'const' 일 때'const' 및'const'로 'x'를 'int'로 추론한다는 인상 아래에있었습니다.즉, '자동'공제는 본질적으로 템플릿 매개 변수와 동일한 규칙을 갖습니다. –

+0

후자는 정확하고, 후자는 정확하지 않습니다. 'y'가 임시라면, const가 아닌 왼쪽 값 참조에 바인드 할 수 없습니다. – nosid

1

내가 보여주는 코드가 Qt 패러다임을 사용하기 때문에 Designer 및 UI 파일과 함께 Qt를 사용한다고 가정합니다.

MyClass::MyClass() 
{ 
    ui->setupUi(this); 
    mygraph = ui.myplot->graph(0); 
} 

이제 당신이 사용할 수있는 다음 ui->setupUI(this) 후, 생성자에서

MyClass { 
    Q_OBJECT 
public: 
    Graph* mygraph; 
    MyClass(); 
} 

:

는 클래스의 Graph* mygraph 회원을 넣고 그래프 (0)를 가리 키도록 설정 그것은 당신의 수업 방법에 있습니다.

int MyClass::getValue() 
{ 
    int a = mygraph->val(); 
    return a; 
} 
0

주저하지 말고 로컬 변수를 정의하십시오. 그들은 가독성을 향상 시키는데 매우 편리하며, -O0으로 컴파일되지 않으면 컴파일러 (참조 또는 실제 변수)에 의해 최적화됩니다 (이 마지막 경우에는 최적화 동작이 확실하지 않습니다)

int a = ui.myplot->graph(0)->val; 

는`#의 define`를 사용할 수없는 이유가 myParticularGraphui.myplot->graph(0)

+0

'graph (0)'은 함수 호출이고'auto &'에 바인드 할 수없는 임시 (rvalue)를 반환합니다. – KillianDS

관련 문제