Как разрешить циклические ссылки в typedefs?

Мне нужно как-то решить эту вещь:

  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 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]