2013-03-19 4 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 и все вкусы make-файлов имеют поддержку для запуска произвольных скриптов во время компиляции. Вам не нужно ограничивать себя запуском компилятором C++.