如何转换数组中的参数列表
How to transform a list of parameter in an array
我想将相同类型的参数列表转换为 C 数组。这是我发现的解决问题的最佳方法:
template <typename T > class _Arr {
template <size_t N> struct Rep_base {
T m_el[N];
operator T * () { return m_el; }
};
public:
template <size_t N> struct Rep;
template <> struct Rep<1> : public Rep_base<1> {
Rep(const T & a) { m_el[0] = a; };
};
template <> struct Rep<2> : public Rep_base<2> {
Rep(const T & a, const T & b) { m_el[0] = a; m_el[1] = b;};
};
...
};
所以给定一个函数:
void f(int x[5]);
如果可以拨打f(_Arr<int>::Rep<5>(1, 2, 3, 4, 5)).
太可怕了。有没有人有更好的解决方案?
如果您确实希望将其作为辅助函数并且不使用 C++11,则可以使用变量参数:
#include <iostream>
#include <stdarg.h>
#include <vector>
std::vector<int> var_func( int n, ... ) {
va_list ap;
va_start(ap, n);
std::vector<int> args;
for(int i = 0; i != n; ++i) {
args.push_back(va_arg(ap, int));
}
va_end(ap);
return args;
}
void f(int x[5]) {
for( int i = 0; i != 5; ++i ) std::cout << x[i];
}
int main() {
f( var_func(5, 1, 2, 3, 4, 5).data() );
return 0;
}
输出12345
你为什么要重新发明轮子?C++已经有了预先构建的容器,这些容器确实希望您正在尝试。如果需要动态大小的数组,请使用 std::vector
。如果需要固定大小的数组,请使用 std::array
。这些是您应该考虑的替代方案。
相关文章:
- 概念中的cv限定符需要表达式参数列表
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- 错误 没有与参数列表匹配的重载函数"getline"实例
- std::vector 没有重载函数的实例与参数列表匹配
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 构造函数/函数声明参数列表中的统一初始化
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 带有整数的变量参数列表
- 转发变量参数列表以模拟 std::thread
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- C++-将具有引用的长参数列表重构为结构
- 缺少别名模板C++参数列表
- C++如果两个模板函数都与参数列表匹配,将调用哪个模板
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- 我可以使用宏自动构建参数列表吗?
- 类成员函数参数列表是否可以依赖于模板参数?