2013-03-19 39 views
1

目的:在代码的不同部分,我加载文件(我的情况下是纹理和字体)。 因此,在程序执行的任何时候都可能发生下载文件(虽然都是缓存的,但仍然存在)。我想在启动时只下载一次。是否可以在编译时收集数据

可能的解决方案:

  1. 手动填写带有纹理和字体缓存对象。
  2. 扫描的文件夹/纹理/ /字体/
  3. 魔术

其实我对纹理做在第二种情况下(因为它不是为内存的关键)。而对于字体,我会使用第一种情况(因为它们对每种尺寸都有不同的渲染)。但是我仍然想知道如何使这个过程自动化。

应该忘记纹理和字体来缩小问题范围,并考虑带有字符串的向量。

class Files{ 
    static vector<string> files; 
    static void addFile(string file){/* magic. may be template<string file> */} 
    static void loadFiles() 
    { 
     for(auto file:files){ 
      cout << file; //for example 
     } 
    } 

} 

int main(){ 
    Files::loadFiles();//=> foobarsmthing 
    Files::addFile("foo"); 
    Files::addFile("bar"); 
    Files::addFile("smthing"); 
    return 0; 
} 

我知道可以用模板计算一些表达式。并认为对我的问题的答案只是“不”。

回答

3

当然,这是可能的。只是不作为C++模板元编程的一部分。 TMP是完整的,这意味着它在计算能力时与其他编程语言一样强大。但它不能与外部世界交流。它无法通过网络套接字进行通信,也无法扫描硬盘上的文件,无法播放声音,也无法在桌面上呈现茶壶。

但是,您可以将其他脚本作为编译的一部分运行。 MSBuild和所有类型的Makefile都支持在编译期间运行任意脚本。您不必限制自己运行只有 C++编译器。

相关问题