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

时间:2016-07-28 08:25:11

标签: c++ polymorphism variadic-templates index-sequence

是否可以写这样的东西?

[]<std::size_t ...I>(std::index_sequence<I...> s) { 

}

还是这个?

I

C ++ 14或C ++ 17中的语法如何?或者根本不可能?基本上,我只想将std::index_sequence<std::size_t ...I> x = std::make_index_sequence<10>{}; // I now is a local template parameter pack 作为模板参数包,而lambda只是作为一种方法。或者,是否有语法来实现以下目的?

sudo yum install gmp-devel mpfr-devel

2 个答案:

答案 0 :(得分:2)

GCC提供后一种语法as an extension,但它不是标准的:

template <typename... Ts>
void foo(const std::tuple<Ts...>& t) {
    auto l = [&t]<std::size_t ...I>(std::index_sequence<I...> s) { 
        std::initializer_list<int>{ (std::cout << std::get<I>(t), 0)... };
    };

    l(std::index_sequence_for<Ts...>{});
}

Live Demo

答案 1 :(得分:1)

不完全相同,但也许您可以使用辅助函数推送序列,如下所示:

#include <functional>
#include <cstddef>
#include <iostream>

auto lambda = [](auto... I){
    int arr[] = { (std::cout << I << std::endl, 0)... };
    (void)arr;
};

template<std::size_t... I>
constexpr auto f(std::index_sequence<I...>) {
    return lambda(I...);
}

int main() {
    f(std::make_index_sequence<3>());
}