【问题标题】:Is it posible to collect data at compile time是否可以在编译时收集数据
【发布时间】:2013-03-19 16:57:17
【问题描述】:

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

可能的解决方案:

  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;
}

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

【问题讨论】:

    标签: c++ templates c-preprocessor metaprogramming


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 2021-10-16
      • 2022-01-12
      • 2021-05-27
      • 2021-09-05
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多