我有一个在C语言中的大型数组,希望将其移入我的Ada项目中。该数组用于存储资产的文件名,这些资产稍后将被加载。它看起来像:
const char *filenames[NUMBER_OF_FILES] = {
/* file[0] */ "res/0.file",
/* ... */
/* file[n] */ "res/some_more/complicated/file.name"
};
我希望将这个内容移动到一个Ada包体中,但是找不到一个合适的方法来实现。显然,我的第一次尝试是:
filenames : constant array (File_Index) of String := (
index_0 => "res/0.file",
-- ...
index_n => "res/some_more/complicated/file.name"
);
但是,当然字符串是一种无约束类型,所以Ada不允许这样做。我将其改为使用Unbounded_Strings,虽然有效,但非常丑陋(需要用To_Unbounded_String
包装每个字符串)。
是否有任何方法可以创建一个大小在编译时就已知的无约束类型数组,就像这样,还是必须使用无界字符串?
function Value (Item: in chars_ptr) return String;
将数组元素转换为Ada字符串。构建混合语言程序比纯Ada复杂一些,因为编译器无法自动跟踪非Ada依赖项,如果您可以接受传统的Makefile或.gpr项目文件,则可以使用这种方法。 - user1818839