Мне нужно как-то решить эту вещь:
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;
};
Но должен быть более удобный способ сделать это.
Вы не можете сделать это, потому что то, что вы просите, вызывает бесконечную рекурсию:
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;
Других решений пока нет …