gpt4 book ai didi

如果成员存在,C++ 设置值

转载 作者:行者123 更新时间:2023-11-30 05:09:48 27 4
gpt4 key购买 nike

template<typename T>
if (std::is_same<T, FrontCameraSegment>::value) {
height = segment.height;
}

我有一个模板来处理多个传感器。一个给我一个高度属性,其他的没有。我在我的代码中需要一次该值,Visualize() 函数的其余部分对于每个传感器都是相同的。所以我想检查 T is_same 是否与 FrontCameraSegment 然后我想使用 segment.height 属性一次。但是,编译器说 "height" 不是传递给 T 的所有元素的成员,这是逻辑。由于同样的原因,强制转换不起作用。使用继承来重构传感器是不可能的(我不允许这样做)。

所以我的问题是:我如何告诉编译器我检查过 height 是一个成员?

最佳答案

在 C++17 中,您可以在以下情况下使用 constexpr:

template<typename T>
void foo(T& segment)
{
if constexpr (std::is_same<T, FrontCameraSegment>::value) {
height = segment.height;
}
// ...
}

之前,你必须使用一些特化/调度:

// fallback
template<typename T>
void setHeightIfPossible(float& height, const T& segment) { /* Empty */ }

void setHeightIfPossible(float& height, const FrontCameraSegment& segment) {
height = segment.height;
}

template<typename T>
void foo(T& segment)
{
// ...
setHeightIfPossible(height, segment);
// ...
}

关于如果成员存在,C++ 设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45974598/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com