gpt4 book ai didi

c++ - 在不声明变量的情况下存储 "variables"

转载 作者:行者123 更新时间:2023-11-28 06:23:03 26 4
gpt4 key购买 nike

我正在尝试创建一个会说话的 AI。为此,我正在为英语中的每个单词(或短语)创建一个类列表。有点像Wiktionary有。

像这样:

class english {
class lemma {
class adjective {
class uncomparable {
// Word strings here.
};
};
};

我在想是否有任何方法可以在不声明数百万个不同变量的情况下存储字符串以提高速度和减少内存。有什么想法吗?

最佳答案

您可以为每个单词创建一个标签类型,并使用静态字符串管理它们:

// class-hierarchy.hpp
#ifndef CLASS_HIERARCHY_HPP
#define CLASS_HIERARCHY_HPP

struct english {
struct substantives {
struct House;
struct Horse;
};
};

// Optional; to avoid long qualified names.
using House = english::substantives::House;
using Horse = english::substantives::Horse;

template<typename WordTag>
struct WordTraits;

template<> struct WordTraits<House> { static constexpr const char* word = "House"; };
template<> struct WordTraits<Horse> { static constexpr const char* word = "Horse"; };

template<typename TagWord>
constexpr char const* getString()
{ return WordTraits<TagWord>::word; }

#endif // CLASS_HIERARCHY_HPP

// main.cpp
#include <iostream>
#include "class-hierarchy.hpp"

int main()
{
std::cout << getString<Horse>() << std::endl;
std::cout << getString<House>() << std::endl;
}

编译后,“目标代码”会是这样的:

int main()
{
std::cout << "Horse" << std::endl;
std::cout << "House" << std::endl;
}

因为其余过程由编译器管理。

是的,它太冗长了,但是“class-hierarchy.hpp”文件可以用任何类型的预处理器解析字典文件来生成,例如:

// dic.txt
english {
substantives {
"House", "Horse"
};
};

例如,可以使用 bison 创建该解析器。最后,命名空间 层次结构不是比类层次结构 更好吗?

这里有一个工作示例:http://coliru.stacked-crooked.com/a/100b0604f7cd2ed6

当然,使用预处理器可以减少冗长:

#define WORD(x, y) \
using y = x; \
template<> struct WordTraits<y> { \
static constexpr const char* word = #y; \
};

struct english {
struct substantives {
struct House;
struct Horse;
};
};

template<typename WordTag>
struct WordTraits;

WORD(english::substantives::House, House);
WORD(english::substantives::Horse, Horse);

工作示例:http://coliru.stacked-crooked.com/a/9f8e7d1490a2c597

关于c++ - 在不声明变量的情况下存储 "variables",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29023051/

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