如何解析类型中的循环链接

How to resolve cyclical links in typedefs?

本文关键字:循环 链接 何解析 类型      更新时间:2023-10-16

我需要解决这个问题:

  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;