2016-10-19 11 views
0

는 어떻게 든이 일을 해결해야합니다typedef에서 순환 링크를 해결하는 방법은 무엇입니까?

class MyType; // this thing doesn't help here 
    typedef std::stack<boost::variant<int, std::function<shared_ptr<MyType>()>>> MyType; 

나는 어떤 도움 감사합니다 이것

error C2371: 'MyType': redefinition; different basic types 

같은 오류가 발생합니다.

편집 :

이 프록시 구조를 사용하여 쉽게 수행 할 수 있습니다

struct MyStruct; 
typedef std::stack<boost::variant<int, std::function<shared_ptr<MyStruct>()>>> MyType; 
struct MyStruct { 
    MyType data; 
}; 

그러나이 작업을 수행하는 더 편리한 방법이 될 수 있어야합니다. 당신은이 작업을 수행 할 수 없습니다

+0

나는 그것이 가능합니다 모르겠어요 중 'typedef' 또는'using'. 그러나 초록에서이 질문은 반드시 부스트를 우려하지는 않습니다. 이 문제를 일으키는 일반 템플릿을 구성 할 수 있습니다. 보다 일반적인 방법으로 문제를 제기하면 문제에 더 많은 관심을 기울일 수 있습니다. –

+0

네, 맞습니다, 로버트. 나는 그것을 더 일반적으로 만들었다. – Hakuhonoo

답변

0

, 당신이 원인을 무한 재귀를 요구하고 있기 때문에 :

typedef std::stack<boost::variant<int, std::function<shared_ptr<MyType>()>>> MyType; 
MyType a; 

가 확장 것 :

std::stack<boost::variant<int, std::function<shared_ptr< 
    std::stack<boost::variant<int, std::function<shared_ptr< 
     std::stack<boost::variant<int, std::function<shared_ptr< 
      *Infinitely many more here* 
     ()>>>> 
    ()>>>> 
()>>> a; 
+0

예, 이것이 내가 필요한 것입니다. 잠재적으로 무한한 깊은 구조. – Hakuhonoo

+0

예, 잠재적으로 무한히 깊은 * 구조 *이지만 무한히 깊은 * 유형 *은 아닙니다. 내가 추측 할 수있는 더 나은 설명이 없으면, 정말로 원하는 것은 int 또는 function-pointer 중 하나 인 변형의 스택이다. – midor

+0

아마 내가 구조체 프록시 (이 게시물의 머리 부분에 추가)로해야하지만, 여전히 나를 위해 이상하게 보입니다. 또는 ... 'MyType'이 아닌'void * '함수에서 돌아와서'MyType '에 캐스트 할 수 있습니다. 어느쪽으로부터의 기분 전환. – Hakuhonoo