c++ - C ++ tbb流程图,multifunction_node给出不完整的类型错误
问题描述
据我了解,当没有完整的类型规范的前向声明时会发生不完整的类型错误,然后实例化该类型,因为编译器无法判断这种类型的大小。就我而言,我不明白这段代码是如何产生这样的问题的。为简单起见,我删除了不相关的部分。
class FilterOnNode {
struct PartialResult { int n1,n2; long e; };
typedef PartialResult* InputResult;
typedef tbb::flow::multifunction_node<InputResult, InputResult> FilterNodeType;
void BuildGraph(tbb::flow::graph &g, tbb::flow::graph_node &src) {
auto sampleNode = FilterNodeType(
g,
tbb::flow::concurrency::unlimited,
[&](const InputResult &input, typename FilterNodeType::output_ports_type &op) { //error points to here
//some logic here... might not send message.
std::get<0>(op).try_put(input);
});
tbb::flow::make_edge(src, sampleNode);
//create couple other nodes like previous then connect edges
tbb::flow::make_edge(tbb::flow::output_port<0>(sampleNode), otherNode);
}
编译器在 lambda 表达式处给出不完整类型的错误。确切的错误说:
/usr/local/include/tbb/flow_graph.h:1568:7: error: incomplete type ‘std::tuple_size<FilterOnNode::PartialResult*>’ used in nested name specifier class multifunction_node
PartialResult 类型不是已经完全指定了吗?试着把它从课堂上拿出来,但仍然是同样的问题。
解决方案
PartialResult 类型不是已经完全指定了吗?
是的,但这不是错误消息所抱怨的。错误消息应读作“错误:不完整类型'[不完整类型的名称]'已使用[使用地点]”。不完整的类型是std::tuple_size<FilterOnNode::PartialResult*>
,不是PartialResult
。没有关于std::tuple_size<T>
何时T
是指针的定义(例如PartialResult*
)。
不完全类型的使用位置与class multifunction_node
. 我四处寻找定义这个的标题,发现了以下内容。(我不知道为什么我找到的 API 文档中没有这些信息。)
tbb/flow_graph.h
, 的定义开始multifunction_node
:
//! implements a function node that supports Input -> (set of outputs) // Output is a tuple of output types. template<typename Input, typename Output, typename Policy = queueing> class multifunction_node :
所以Output
参数必须是输出类型的元组,但您提供了原始输出类型。尝试将您的定义更改FilterNodeType
为以下内容。
typedef tbb::flow::multifunction_node<InputResult, std::tuple<InputResult>> FilterNodeType;
// ^^^^^^^^^^^ ^
可能可以替换std::tuple
为tbb::flow::tuple
,但我没有研究如何使用 TBB 元组。
推荐阅读
- asynchronous - 我如何获得成功插入学生的成功计数?
- javascript - 如何正确解析日期字符串
- asp.net-core - 在 .NET 中配置后如何访问 AWS 密钥?
- postgresql - 摄取完成后的 citus 写入活动
- oracle - 尝试确定异步作业何时完成:调用 Oracle 的 dbms_job.submit
- nginx - 多个服务的 NGINX 配置覆盖一个配置的 add_header
- swift - 自定义 UIBarButtonItem 不适用于外观
- java - 使用基准测试时的 Optaplanner OptaPlannerXmlSerializationException
- spring-webflux - WebClient - 如何忽略特定的 HTTP 错误
- javascript - Safari 比其他浏览器慢得多