1

目标:在代码的不同部分,我正在加载文件(在我的例子中是纹理和字体)。因此,下载文件可以在程序执行的任何时候发生(虽然所有缓存,但仍然。)我想下载只在启动时发生一次。

可能的解决方案:

  1. 使用纹理和字体手动填充缓存对象。
  2. 扫描文件夹 /textures/ /fonts/
  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;
}

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

4

1 回答 1

3

当然,这是可能的。只是不作为 C++ 模板元编程的一部分。TMP 是图灵完备的,这意味着它在计算能力方面与任何其他编程语言一样强大。但它无法与外界对话。它不能通过网络套接字进行通信,它不能扫描你的硬盘驱动器中的文件,它不能播放声音,它不能在你的桌面上渲染一个茶壶。

但是您可以在编译过程中运行其他脚本。MSBuild 和所有风格的 makefile 都支持在编译期间运行任意脚本。您不必限制自己运行C++ 编译器。

于 2013-03-19T17:06:28.823 回答