gpt4 book ai didi

c++ - 仅 header 实现中的大型静态数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:01 26 4
gpt4 key购买 nike

由于需要能够在仅 header 实现中引用 unicode 字符组,我想先声明所有数组。模板允许我在 header 中初始化静态成员,但代码看起来很乱。

这只是二十多个组中的两个:

struct CharacterClass 
{
struct Value
{
int l;
int h;
};
};

template < int N >
struct Nd : public CharacterClass
{
static const Value v[];
};

template< int N >
const typename Nd< N >::Value Nd< N >::v[] = {
{ 0x00030 , 0x00039 }, { 0x00660 , 0x00669 }, { 0x006f0 , 0x006f9 }, { 0x007c0 , 0x007c9 }, { 0x00966 , 0x0096f },
{ 0x009e6 , 0x009ef }, { 0x00a66 , 0x00a6f }, { 0x00ae6 , 0x00aef }, { 0x00b66 , 0x00b6f }, { 0x00be6 , 0x00bef },
{ 0x00c66 , 0x00c6f }, { 0x00ce6 , 0x00cef }, { 0x00d66 , 0x00d6f }, { 0x00e50 , 0x00e59 }, { 0x00ed0 , 0x00ed9 },
{ 0x00f20 , 0x00f29 }, { 0x01040 , 0x01049 }, { 0x017e0 , 0x017e9 }, { 0x01810 , 0x01819 }, { 0x01946 , 0x0194f },
{ 0x019d0 , 0x019d9 }, { 0x01b50 , 0x01b59 }, { 0x0ff10 , 0x0ff19 }
};

template < int N >
struct Nl : public CharacterClass
{
static const Value v[];
};
template< int N >
const typename Nl< N >::Value Nl< N >::v[] = {
{ 0x016ee , 0x016f0 }, { 0x02160 , 0x02182 }, { 0x03007, 0x03007 }, { 0x03021 , 0x03029}, { 0x03038 , 0x0303a }
};

问题 1:是否可以在基类中声明一次数组而不必为每个派生类型重复声明一次?

问题 2:如何隐藏虚拟“int N”,以便以后无需添加模板参数即可引用结构? IE。 int x = Nd.v[10].l;

Q3:有更好的方法吗?

最佳答案

我会尝试为您提供 Q1 的替代方案。我不喜欢看到对程序逻辑毫无意义的硬编码值。

这是我有时使用的一个好技巧:

创建一个新文件并将值粘贴到其中。

数据.dat

{ 0x00030 ,  0x00039 }, { 0x00660 ,  0x00669 }, { 0x006f0 ,  0x006f9 }, { 0x007c0 ,  0x007c9 }, { 0x00966 ,  0x0096f },
{ 0x009e6 , 0x009ef }, { 0x00a66 , 0x00a6f }, { 0x00ae6 , 0x00aef }, { 0x00b66 , 0x00b6f }, { 0x00be6 , 0x00bef },
{ 0x00c66 , 0x00c6f }, { 0x00ce6 , 0x00cef }, { 0x00d66 , 0x00d6f }, { 0x00e50 , 0x00e59 }, { 0x00ed0 , 0x00ed9 },
{ 0x00f20 , 0x00f29 }, { 0x01040 , 0x01049 }, { 0x017e0 , 0x017e9 }, { 0x01810 , 0x01819 }, { 0x01946 , 0x0194f },
{ 0x019d0 , 0x019d9 }, { 0x01b50 , 0x01b59 }, { 0x0ff10 , 0x0ff19 }

现在,当您想重复它时,请执行以下操作:

const typename Nd< N >::Value Nd< N >::v[] = { 
#include "data.dat"
};

这样,预处理器将为您粘贴所有这些值,因此您无需一直重复它们。

关于c++ - 仅 header 实现中的大型静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17328820/

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