大佬教程收集整理的这篇文章主要介绍了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,请注明来意。