C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C,前向声明和递归数据类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够有一个地图,其中值是指向地图的指针.就像是

std::map<KeyType,const_pointer_to_this_map's_value_type>

我知道我可以使用COnst void *而不是const_pointer_to_this_map’s_value_type.

我已经看过循环数据类型定义的技巧,例如@L_874_1@或http://qscribble.blogspot.fr/2008/06/circular-template-references-in-c.html,但我不确定它们是否以及如何应用于我的案例.

在那里他们使用自己的类(Vertex和Edge; A和B),但是这里std :: map和std :: map :: value_type已经在STL头中定义了,我不能用Combo类实例化它们.

有没有办法定义上面的地图?

解决方法

只需将其包裹在一个结构中.您需要为类型指定名称才能引用它.

template<class T>
class Graph {
    std::map<T,const Graph<T>*> data;
public:
    // ...
};

在C 11中,您还可以使用带有前向声明的typedef的模板别名来执行此操作:

namespace {

template<class T>
struct GraphWrap {
    class type;
    typedef std::map<T,const typename GraphWrap<T>::type*> type;
};

}

template<class T>
using Graph = typename GraphWrap<T>::type;

当然,在这里使用std :: map可能有点误导,因为你使用key类型参数作为容器的值类型.就像Mooing Duck所说的那样,你似乎在建模一个有向图,每个节点最多有一个出边.如果你想用图表做一些事情,那里有图表库 – 如果你正在做其他事情,或者如果你只是想学习,那么这是另一个故事.

大佬总结

以上是大佬教程为你收集整理的C,前向声明和递归数据类型全部内容,希望文章能够帮你解决C,前向声明和递归数据类型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。