加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);

当然,您无法以这种方式定义循环图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读