gpt4 book ai didi

c++ - integer_sequence 和默认参数值

转载 作者:行者123 更新时间:2023-11-30 03:52:00 25 4
gpt4 key购买 nike

如下直接使用默认参数值生成整数序列会导致硬错误(编译器clang-3.6):

#include <iostream>
#include <utility>

#include <cstdlib>

template< std::size_t M, std::size_t N > // say M - arity, N - number of types
struct test
{

template< std::size_t ...i >
void
operator () (std::index_sequence< i... > = std::make_index_sequence< M >{}) const
{
std::size_t indices[M];
for (std::size_t & m : indices) {
m = 0;
}
for (;;) {
(std::cout << ... << indices[i]) << std::endl;
std::size_t m = 0;
for (;;) {
std::size_t & n = indices[m];
++n;
if (n != N) {
break;
}
n = 0;
if (++m == M) {
return;
}
}
}
}

};

int
main()
{
#if 0
test< 3, 3 >{}(); // hard error
#else
test< 3, 3 >{}(std::make_index_sequence< 3 >{}); // ugly workaround
#endif
return EXIT_SUCCESS;
}

这看起来很奇怪,因为简单的替换按预期工作。

为什么会这样?为什么在上述情况下无法分配默认参数,但可以显式分配?

const &&& 附加到参数类型没有任何作用。

最佳答案

不能从默认参数推导出模板参数。这就是为什么我们通常在构建序列之前委托(delegate)给辅助函数:

void operator()() const {
helper(std::make_index_sequence<M>{});
}

template<std::size_t... i>
void helper(std::index_sequence<i...>) const;

关于c++ - integer_sequence 和默认参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com