我有以下问题:
template< std::size_t N >
class A
{
std::function< std::size_t( /*std::size_t,....,std::size_t <- N-times*/) > foo;
};
正如您在上面看到的,我尝试声明一个 std::function<...> foo
作为类(class)的一员A
.在这里,我希望 foo 具有返回类型 std::size_t
(这没问题)作为输入,我将传递 N 次类型 std::size_t
但我不知道怎么办。有没有可能?
非常感谢。
最佳答案
你可以使用std::index_sequence
:
template<std::size_t N, typename = std::make_index_sequence<N>>
struct A;
template<std::size_t N, std::size_t... S>
struct A<N, std::index_sequence<S...>> {
std::function<std::size_t(decltype(S)...)> foo;
};
如果你愿意,你也可以定义它展开的类型:
template<typename T, std::size_t N, typename = std::make_index_sequence<N>>
struct A;
template<typename T, std::size_t N, std::size_t... S>
struct A<T, N, std::index_sequence<S...>> {
template<std::size_t>
using type = T;
std::function<std::size_t(type<S>...)> foo;
};
关于c++ - 在模板参数中扩展类型 N 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995149/