目标:在代码的不同部分,我正在加载文件(在我的情况下是纹理和字体)。 因此,下载文件可以在程序执行的任何时候发生(虽然所有缓存,但仍然。)我想下载只在启动时发生一次。
可能的解决方案:
实际上我会像第二种情况那样为纹理做(因为它对内存并不重要)。对于字体,我将使用第一种情况(因为它们将针对每种尺寸使用不同的渲染)。但我仍然想知道如何自动化这个过程。
应该忘记纹理和字体以缩小问题范围并考虑带字符串的矢量。
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;
}
我知道用模板计算一些表达式是可能的。并认为我的问题的答案只是“不”。
答案 0 :(得分:3)
当然,这是可能的。只是不作为C ++模板元编程的一部分。 TMP是图灵完备的,这意味着当涉及到它可以计算的内容时,它就像任何其他编程语言一样强大。但它无法与外界交谈。它无法通过网络套接字进行通信,无法扫描硬盘驱动器中的文件,无法播放声音,也无法在桌面上呈现茶壶。
但是您可以在编译过程中运行其他脚本。 MSBuild和所有类型的makefile都支持在编译期间运行任意脚本。您不必限制自己仅运行 C ++编译器。