编译文件中的自动调用功能

时间:2018-12-20 10:07:29

标签: c++

我一直在尝试创建自己的跨平台资源管理器来嵌入和管理资源。但是,我遇到了一些问题。 这个想法是,所有资源都通过一个程序运行,该程序创建一个.cpp文件,并将资源的内容作为数组。我的想法是以这种方式进行操作,这些.cpp只需要作为库的一部分进行构建即可注册为资源。

我有一个单例类ResourceManager,它跟踪嵌入式资源。 我使用ResourceAutoRegister类,如果资源被编译,则使用构造器自动注册资源:

ResourceAutoRegister(const std::string & name, const uint8_t * data, const 
size_t data_size)
{
    ResourceManager::getInstance().create_resource(name, data, data_size);
}

这在类似于以下内容的资源文件中被调用:

static const std::array<uint8_t,41947> ar_picture = {...};
namespace {ResourceAutoRegister autoregpic("Textures/picture.png",ar_picture.data(), ar_picture.size());}

为每个资源创建一个.cpp文件。

当我做一个测试应用程序时,这很好用,其中ResourceManager和资源是作为应用程序的一部分构建的。但是,其想法是将其用作静态库,因此只要对资源进行更改,就只需要编译大量资源。 但是,当我这样做时,没有构造ResourceAutoRegister对象。

问题是,当作为静态库链接到应用程序的一部分时,为什么不构造这些对象?其次,即使以库形式构建,也有什么方法可以确保它们被构建。从库的大小来看,库中显然存在静态数组。

0 个答案:

没有答案