c – 如何在编译时建立有向图?
发布时间:2020-12-16 07:08:31 所属栏目:百科 来源:网络整理
导读:我想在编译时在C 11中构建有向图. 示例:我有一些线程和队列,并希望建立: +-------+ +---------+ +-------+| f_gen | - QGen - | f_check | - QOut - | f_out |+-------+ +---------+ ^ +-------+ | | |/ | | | QProc | | | |/ | | | +-----------+ | | f
我想在编译时在C 11中构建有向图.
示例:我有一些线程和队列,并希望建立: +-------+ +---------+ +-------+ | f_gen | -> QGen -> | f_check | -> QOut -> | f_out | +-------+ +---------+ ^ +-------+ | | |/ | | | QProc | | | |/ | | | +-----------+ | | f_process | / +-----------+ 请注意,这只是一个例子:解决方案应该处理 我想写它可能像: make_directed_graph<Queue,Thread>( // Queues { // ID,Type of Queue,queue size { 0,std::string,100 },// QGen { 1,int,250 },// QProc { 2,500 } // QOut },// Threads { // Fn,thread cnt,in queues,out queues { f_gen,5,{},{ qref(0) } },// ID 1: QGen { f_check,30,{ qref(0) },{ qref(1),qref(2) }},// IDs of queues { f_process,75,{ qref(1) },{ qref(2) }},{ f_out,12,{ qref(2) },{} } }); 请注意,这只是一个想法 – 任何其他可能性 我设法实现了make_tree函数. make_tree< arexp,int >( { '+',{ 1,2,{ '*',{ 3,4,5 } } } } ) 这里有一个很大的区别:可以创建节点和边缘 有向图的最大问题是如何引用一个对象/ 我的问题: >是否可以在编译时定义有向图? 解决方法
这通常是可能的,因为您使用指针识别对象,并且这些指针是有效的非类型模板参数.
Queue<std::string> QGen(100); // No need for an ID,we have &QGen. // We *do* need to pass the Queue type to figure out the type of &QGen. Thread<void,nullptr,&QGen> f_gen(5); 当然,您无法以这种方式定义循环图. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |