设计思路
- 模板递归:通过模板特化来区分不同维度的数组。利用递归模板实例化,直到数组维度为0时终止递归。
- 类型萃取:使用
std::enable_if
和std::is_array
来检查参数是否为数组,并根据维度进行不同的操作。
代码实现
#include <iostream>
#include <type_traits>
#include <vector>
// 辅助函数,获取数组维度
template <typename T>
constexpr int get_dimension() {
return 0;
}
template <typename T, std::size_t N>
constexpr int get_dimension(T (&)[N]) {
return 1 + get_dimension<T>();
}
// 一维数组求和
template <typename T, std::size_t N>
T sum(const T (&arr)[N]) {
T result = 0;
for (std::size_t i = 0; i < N; ++i) {
result += arr[i];
}
return result;
}
// 二维数组求行列式(简单示例,仅支持2x2矩阵)
template <typename T>
T determinant(const std::vector<std::vector<T>>& matrix) {
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
// 通用函数模板,根据维度执行操作
template <typename T, int dim, typename = std::enable_if_t<dim == 1>>
auto operate(const T& arr) {
return sum(arr);
}
template <typename T, int dim, typename = std::enable_if_t<dim == 2>>
auto operate(const std::vector<std::vector<T>>& arr) {
return determinant(arr);
}
// 更高维度的操作可继续添加模板特化
int main() {
int oneDimArray[] = {1, 2, 3, 4};
std::cout << "Sum of one - dimensional array: " << operate(oneDimArray) << std::endl;
std::vector<std::vector<int>> twoDimArray = {
{1, 2},
{3, 4}
};
std::cout << "Determinant of two - dimensional array: " << operate(twoDimArray) << std::endl;
return 0;
}