2016-08-22 3 views
4

는,이 코드 조각을 :typedef로 만들 유형을 선언하려면 어떻게해야합니까? 예를 들어

class Foo; 
class Something { 
    Foo *thing; 
}; 
typedef std::vector<Something> Foo; 

이 컴파일되지 않습니다는 typedef가 공격 할 때 Foo 이미 유형이기 때문이다. 그러나, 나는 그것이 나의 유스 케이스를 보여줄 것이라고 생각한다; 나는주기적인 의존성을 가지고 있고 다른 것을 수행하기 위해 하나를 필요로하지만, (현재) 하나는 typedef이다. 나는 모든 my_foo.inside.some_method()inside을 기억해야하기 때문에 나는

class Foo { 
    std::vector<Something> inside; 
} 

같은 것을 쓰고 싶지 않은 것입니다. 또한 많은 상용구가 있기 때문에 std::vector<Something>에 래퍼를 작성하는 것을 피하고 싶습니다.

typedef으로 정의하는 유형을 전달하려면 어떻게해야합니까? 또는 위의 솔루션 중 하나를 사용하여 없이없이 순환 종속성 문제를 어떻게 해결할 수 있습니까? 전혀 가능합니까?

"아직 typedef을 (를) 아직 선언하지 않은 유형으로 할 수 있습니까?"라는 질문을하지 않습니다. "어떻게 typedef을 사용하여 이전에 선언 된 유형을 정의 할 수 있습니까?"라고 묻습니다.

class Something; 
typedef std::vector<Something> Foo; 
class Something { Foo *thing; }; 

당신이 C++ 11 버전 이상을 사용하는 경우가하는 typedef 대신에 using 선언을 사용합니다 :

class Something; 
using Foo = std::vector<Something>; 
class Something { Foo *thing; }; 

을 그리고 그게 다야

+0

용어 중 하나라도 사용하지 않으면 사과드립니다. 나는 결코 그것을 정말로 배웠다. 기분이 틀릴 것 같은 가설이나 질문을 수정 해주십시오. –

+0

'typedef Foo;' –

+0

@ Jean-FrançoisFabre IIRC이 컴파일 오류입니다 –

답변

8

는 앞으로 대신 클래스를 선언합니다.

+0

... 오. 이봐. 나는 똑똑해. –

+0

'typedef '를 통해'using'을 사용해야하는 특별한 이유가 있습니까? 나는 템플리트 별칭을 사용하고자 할 때 중요하다고 알고 있지만, 여기서는 그렇지 않습니다. –

+1

@QPaysTaxes 저는 우리가 2016_에 살고 있기 때문에 말할 것입니다. 그러나 선언으로서 나에게 훨씬 더 명확합니다. – skypjack