gpt4 book ai didi

用于在编译时检测对称数组的 C++ 模板编程

转载 作者:太空狗 更新时间:2023-10-29 20:22:18 25 4
gpt4 key购买 nike

比如我在头文件中有如下c++代码

struct Data {
static const int N = 4;
static const int A[N];
};

并在其cpp文件中添加以下内容来定义数组A内容。

const int Data::A[Data::N] = {1,2,2,1};

有没有办法写一个模板来检测数组A内容在编译时是对称的? (可能 c++11 功能支持,但我不熟悉它的功能...)

例如,DetectSymmetric<Data>::is_sym将是 true如果 A 的内容是{1,2,2,1}false , 说它是否等于 {1,2,3,4}

最佳答案

在 C++11/14 中,您可以使用 constexpr 函数:

const int A[4] = { 1,2,2,1 };


template<int N>
constexpr bool symmetric_helper( const int (&a)[N], int idx) {
return idx > 0 ? symmetric_helper<N>(a, idx - 1) && (a[idx - 1] == a[N - idx]) : true;
}
template<int N>
constexpr bool symmetric(const int (&a)[N]) {
return symmetric_helper<N>(a, N / 2);
}

std::cout << symmetric(A) << std::endl;

使用 C++14,您可以编写一个简单的 for 循环而不是递归,但 C++11 对 constexpr 函数有非常严格的限制。

关于用于在编译时检测对称数组的 C++ 模板编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531063/

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