小编Gra*_*ner的帖子

在创建C++枚举和依赖数据结构时,如何避免重复自己?

可能重复:
枚举到字符串:如果无效/未找到,则返回枚举整数值

简而言之,我所拥有的(工作)定义代码是这样的:

enum Gadget
{
    First,
    Second,
}; 

const char* gadget_debug_names[] = {
    "First",
    "Second",
    // note: strings are same as enum tokens here, but bonus points if
    //       they can optionally be given different values
};
Run Code Online (Sandbox Code Playgroud)

但是,如果信息位于必须手动维护的多个单独位置,则容易出错.(在某些情况下,在代码库中,我正在使用这两个 - 或更多 - 地方甚至不在同一个文件中.)所以,将这些东西命名一次真的很棒.

现在我们可以使用代码生成和声明性数据文件来完成此操作,但是如果有更好的方法,我宁愿不向现有的构建过程添加另一个步骤.拥有看起来像的东西是完美的

DEFINE_GADGET(First)
DEFINE_GADGET(Second)
Run Code Online (Sandbox Code Playgroud)

(如果需要,可选择启动/停止宏)但是,由于宏只是纯文本替换,我无法想出让预处理器在写出枚举定义时"记住"标记的任何方法.

我认为这也可能通过元编程实现,但我对如何做到这一点感到茫然.我在那里看到的所有例子都涉及递归地构建数据结构.我可以看到我如何以这种方式构建字符串数组,但我不确定如何传递令牌名称,或者如何构建枚举.(当然,使用元编程来构建一个字符串数组会非常荒谬.)

有没有办法让我在这里保持DRY,而不使用代码生成?

c++ macros enums metaprogramming dry

10
推荐指数
1
解决办法
1229
查看次数

可以使用Android Studio从库项目中创建兼容Unity插件的JAR吗?

使用Unity3d时,可以通过插件访问"原生"(纯java)Android功能.如文档中所述,

有几种方法可以创建Java插件,但每种情况下的结果都是最终得到一个.jar文件,其中包含插件的.class文件

当我在eclipse中创建一个Android应用程序项目,并设置它是一个库时,它会自动.jar在该bin文件夹中生成一个文件.我知道这是Android工具链上下文中的临时文件,但这是Unity需要的文件,以便查看类并构建它自己的内部JNI魔法.(如果需要在该过程中更加清晰,则在此处概述整个过程.)

不幸的是,尽管我可以说,Android Studio不会生成此文件.有没有办法让我告诉它给我这个文件,或者用其他方式来生成Unity可以使用的代码?

android jar unity-game-engine android-studio

9
推荐指数
2
解决办法
8105
查看次数

使用尾指针编写链表的惯用方法是什么?

作为Rust的学习项目,我有一个非常简单(工作,如果不完整)的单链表实现.结构的声明如下:

type NodePtr<T> = Option<Box<Node<T>>>;

struct Node<T> {
    data: T,
    next: NodePtr<T>,
}

pub struct LinkedList<T> {
    head: NodePtr<T>,
}
Run Code Online (Sandbox Code Playgroud)

实施size并且push_front都是相当直接的,尽管迭代地执行大小确实涉及一些"与借用检查员打架".

我想要尝试的下一件事是添加一个tail指向LinkedList结构的指针.实现高效push_back运营.在这里,我遇到了一堵墙.起初我试图使用Option<&Box<Node<T>>>然后Option<&Node<T>>.这两个都导致了'a无处不在,但最终仍然无法承诺tail有效的终身检查.

我已经得出了一个初步结论:这些定义是不可能的:没有办法保证编译器tail在我认为有效的地方有效.我可以实现这一目标的唯一方法是让我的所有指针都是Rc<_>或者Rc<RefCell<_>>,因为那些是指向同一个对象(最终节点)的两个东西的唯一安全方法.

我的问题:这是正确的结论吗?更一般地说:对于数据结构中的无主指针,什么是惯用的Rust解决方案?在我看来,引用计数对于如此简单的事情看起来非常重,所以我认为我必须遗漏一些东西.(或者我可能还没有考虑到对于记忆安全的正确心态.)

linked-list reference-counting rust

6
推荐指数
1
解决办法
928
查看次数

从.NET标准库获取Windows系统目录

似乎是一个简单的问题,但谷歌似乎没有给我一个答案.

在.NET Framework中,我们可以使用Environment.SystemDirectory获取系统目录(看起来像这样C:\WINDOWS\System32),但当前版本的.NET Standard或.NET Core中不存在该属性.有没有办法在.NET标准(或失败的.NET Core)库中获取该文件夹?

为了我的目的,不要求调用在非Windows平台上返回一些有用的东西(无论如何它会返回 /lib什么 /usr/lib?等等),虽然我觉得它会很酷.

现在似乎我最好的选择是尝试C:\WINDOWS\System32直接使用,如果不存在,那么尝试使用C:\WinNT\System32,但感觉就像这样的黑客做到这一点.

c# windows .net-core .net-standard

4
推荐指数
1
解决办法
1102
查看次数