

Script House收集的这篇文章主要介绍了c –如何在编译时初始化数组并手动提供一些元素? Script House的编辑认为这非常好. 现在,我将与您分享并提供参考.

我正在使用指向函数的数组. 我写这段代码是因为某些元素无法用功能模板表示.
extern void zero(); // isr 0 is defined somewhere else
void one() {
// isr 1
}
template <std::size_t N>
void Nth() {
// isr N
}
using func = void (*)();
constexpr func interrupt_vector[256] = {
&zero,&one,&Nth<2>,&Nth<3>,...
&Nth<254>,&Nth<255>,};

我已经阅读了有关静态表生成和变量模板的信息,但这些都是关于初始化整个数组的信息.
如何简化代码?

@实际上,它是中断向量的一部分. 由于应该直接调用它,因此我无法使用模板专门化
template <>
void Nth<0>() {
zero();
}

@@编辑代码. 我认为这件事很令人困惑.
如果您可以更改为使用std :: array编译 初始化,则可以使用.
using func = void (*)();
template<int...>
struct index_sequence { };
template<int From,int N,int... Is>
struct make_index_sequence_from : make_index_sequence_from<From,N - 1,Is...> { };
template<int From,int... Is>
struct make_index_sequence_from<From,From,Is...> : index_sequence<Is...> { };
template<int... Is> constexpr
std::array<func,256> make_interrupt_vector_array(index_sequence<Is...>)
{
return {{zero,one,Nth<Is>...}};
}
constexpr
std::array<func,256> make_interrupt_vector_array()
{
return make_interrupt_vector_array(make_index_sequence_from<2,256>());
}
constexpr auto interrupt_vector = make_interrupt_vector_array();
以上是Script House为您收集的c-如何在编译时初始化数组并手动提供一些元素?所有内容,希望本文能帮助您解决c-如何在编译时初始化数组,以及手动提供一些元素?程序开发中遇到的问题.
如果您认为Script House网站的内容不错编译 初始化,欢迎向程序员朋友推荐Script House网站.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-241941-1.html
除了有点儿卡