C++ 递归类型定义
以下是允许的吗C++ 递归类型定义,c++,typedef,recursion,C++,Typedef,Recursion,以下是允许的吗 typedef Foo<Bar> Bar; typedef Foo-Bar; 我的编译器抱怨“class Bar”之前有一个声明为“class Bar”。如果Bar是作为Foo模板参数的类,它不能同时是typedefedFoo。 您将重新定义Bar,首先作为一个独立类,然后作为一个模板实例化,但甚至是typedef Foo-Bar将不起作用。如果Bar是作为Foo模板参数的类,则不能同时将其定义为Foo。 您将重新定义Bar,首先作为一个独立类,然后作为一个模板实
typedef Foo<Bar> Bar;
typedef Foo-Bar;
我的编译器抱怨“class Bar”之前有一个声明为“class Bar”。如果Bar是作为Foo模板参数的类,它不能同时是typedefed
Foo
。您将重新定义Bar,首先作为一个独立类,然后作为一个模板实例化,但甚至是
typedef Foo-Bar如果已将Bar声明为类,则代码>将不起作用。如果Bar是作为Foo模板参数的类,则不能同时将其定义为Foo
。
您将重新定义Bar,首先作为一个独立类,然后作为一个模板实例化,但甚至是typedef Foo-Bar如果您已经将Bar声明为类,则代码>将不起作用。您所做的等同于:
struct A {};
struct B {};
typedef A B;
毫无疑问,这是不合法的。你所做的等同于:
struct A {};
struct B {};
typedef A B;
不可不合法。
< P>不允许。 < P>不允许。为什么人们认为这样做有意义?考虑一个状态机,其中每个状态函数返回指向下一个函数执行的指针。此类函数的类型是递归的。可以用类(StuttStaseFuffe{StaseFoeCuffor())(Vult*Wrar);(};),而不是用原始函数或Type Debug来表达。为什么人们会认为这样做是有意义的?考虑一个状态机,每个状态函数都返回一个指针指向下一个要执行的函数。此类函数的类型是递归的。你可以用类(StuttStaseFoe{{StaseFoeCuffor)(Vult*Wrar);(};),但不与,如原始函数或Type Debug。Typedefs和类在C++中不在不同的命名空间中,因此在C++中是不合法的。Typedefs和类在C++中没有不同的命名空间,因此在C++中是不合法的。