C++11 でコンパイル時に外部のファイルを読み込む

まぁ #include を使用するのですが。
外部ファイルを文字列として読み込む必要があるので、外部ファイルに少し手を加える必要があります。
C++11 であれば raw string literal が使用できるので多少マシになりますね。

[ソース]

#include <iostream>
#include <string>

int
main(){
    std::string const text =
        #include "input.txt"
    ;
    
    // Sprout.String で constexpr の場合
//  constexpr auto text = sprout::to_string(
//      #include "input.txt"
//  );
    
    std::cout << text << std::endl;

    return 0;
}

[input.txt]

R"(
homu
mami
mado
"an"
saya
)"

[出力]

homu
mami
mado
"an"
saya

これでコンパイル時に外部ファイルを読み込む事が出来るので、Sprout.Weed や Metaparse などでコンパイル時に文字列解析するなどして遊ぶことが出来ます。
あと『R"(』の後に余計な改行コードが入ってしまうので注意。

[コンパイラ]

  • g++ (GCC) 4.8.0 20120415 (experimental)
  • clang++ (LLVM) 3.2 20120514(trunk)