标签: index-sequence

多态 lambda 的非类型模板参数?

有没有可能写出这样的东西?

[](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)

c++ polymorphism variadic-templates index-sequence

5
推荐指数
1
解决办法
265
查看次数

如何从循环中生成的索引传递模板参数?

假设我想在循环中一遍又一遍地调用一些模板,并在模板参数中使用循环索引。像这样(除非不违法):

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 或更早版本中发现的恐怖之处。

有没有更干净的方法来做到这一点?

c++ templates index-sequence

3
推荐指数
1
解决办法
148
查看次数

如何在类模板的成员初始值设定项列表中初始化数组类型的数据成员?

例如,我有一个名为 的类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。

c++ arrays member-initialization c++14 index-sequence

1
推荐指数
1
解决办法
81
查看次数