【发布时间】:2017-08-31 06:25:10
【问题描述】:
template<typename T>
if (std::is_same<T, FrontCameraSegment>::value) {
height = segment.height;
}
我有一个模板来处理多个传感器。一个给我一个高度属性,其他的没有。我的代码中需要该值一次,Visualize() 函数的其余部分对于每个传感器都是相同的。
所以我想检查 T is_same 是否与 FrontCameraSegment 一起,然后我想使用 segment.height 属性一次。
但是,编译器说"height" 不是传递给T 的所有元素的成员,这是逻辑。
由于同样的原因,演员表不起作用。
使用继承重构传感器是不可能的(我不能做那部分)。
所以我的问题是:我如何告诉编译器我检查了height 是一个成员?
【问题讨论】:
-
您需要根据
std::is_same<T, FrontCameraSegment>::value的结果为您的模板提供专业化 -
@LogicStuff 感谢您指出正确的答案。但我不同意这是重复的。重复意味着重复的问题,在这种情况下,它只是对两个不同问题的相同答案。另请参阅 meta.stackoverflow.com/a/266246/1023911 和 meta.stackoverflow.com/q/292329/1023911。
-
@WernerHenze - 不,重复意味着相同的答案。这就是为什么在关闭时,关闭布局的标题为“This question has a answer here:”。当然,答案也必须易于应用。
-
@StoryTeller 但是您链接的问题和答案仅适用于支持 C++17 的编译器,因此受限于旧标准的人不会搜索
constexpr if,但更有可能搜索更通用的像OP一样回答(例如SFINAE)。所以问题比 C++17 更普遍
标签: c++