有没有可能写出这样的东西?
[](std::index_sequence<std::size_t ...I> s) {
};
Run Code Online (Sandbox Code Playgroud)
或这个?
[]<std::size_t ...I>(std::index_sequence<I...> s) {
}
Run Code Online (Sandbox Code Playgroud)
C++14 或 C++17 中的语法如何?或者根本不可能?基本上,我只想将I用作模板参数包,而 lambda 只是一种方法。或者,是否有实现以下目标的语法?
std::index_sequence<std::size_t ...I> x = std::make_index_sequence<10>{};
// I now is a local template parameter pack
Run Code Online (Sandbox Code Playgroud) 假设我想在循环中一遍又一遍地调用一些模板,并在模板参数中使用循环索引。像这样(除非不违法):
template <typename T, int k>
T function(T x) {
for (int i = 1; i <= k; ++i) {
for (int j = i - 1; j >= 0; --j) {
constexpr bool method_one_ok = function_of(i, j);
if (method_one_ok) {
x = method_one<T, i, j, k>(x);
} else {
x = method_two<T, i, j, k>(x);
}
}
}
return x;
}
Run Code Online (Sandbox Code Playgroud)
我知道如何使用递归模板和专业化来艰难地完成它,但这是我在 C++11 或更早版本中发现的恐怖之处。
有没有更干净的方法来做到这一点?
例如,我有一个名为 的类Vector表示向量,还有一个名为 的类Integer表示整数。
class Integer{
public:
Integer(int v):value_(v){};
private:
int value_;
};
template<uint32_t Dim>
class Vector{
public:
Vector(int v[Dim])
://How to initialize each element of the value_ array here?
{
}
private:
Integer value_[Dim];
}
Run Code Online (Sandbox Code Playgroud)
由于Integer没有默认构造函数,因此必须value_在 的成员初始值设定项列表中初始化数组的每个元素Vector。但是,由于数组的长度是模板参数,因此不能直接使用类似value_{v[0], v[1], v[2]}value_ 数组的东西来初始化。我正在使用c++14。