gpt4 book ai didi

c++ - std::decay 零长度数组

转载 作者:太空狗 更新时间:2023-10-29 23:12:50 24 4
gpt4 key购买 nike

我正在处理一些遗留的 C 结构——我们有零长度数组。我认为这是无效的,但我们必须忍受它。我正在编写一个宏,我想使用 std::decay 将数组衰减为指针类型。

但是如果我有一个零长度数组 -

struct data {
key[0]; <<
};

std::decay<decltype(data::key)>不会衰减为指针类型。我将其用作函数返回类型,它会提示 -

海湾合作委员会错误:

error: ‘function’ declared as function returning an array

如果它是一个长度 >= 1 的数组,它工作正常

最佳答案

我们可以让编译器的类型检查器代替模板替换为我们做衰减:

#include <type_traits>

template <typename T>
T* as_ptr(T* x) { return x; }

template <typename T>
using DecayToPointer = decltype(as_ptr(std::declval<T>()));


int main() {
static_assert(std::is_same<DecayToPointer<int[0]>, int*>::value, "");
static_assert(std::is_same<DecayToPointer<int[1]>, int*>::value, "");
static_assert(std::is_same<DecayToPointer<int[]>, int*>::value, "");
}

关于c++ - std::decay 零长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43359947/

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