#define count(array) (sizeof(array) / sizeof(array[0]))
利用例:
short a[128];
printf("count: %u\n", count(a));
#ifdef __cplusplus
#define is_cpp true
#else
#define is_cpp 0
#endif
あるいは:
#define is_cpp (sizeof(char) == sizeof('A'))
#define FOO_BASE_DIR c:/usr/include/foo/
#define FOO_PP_IDENTITY(x) x
#define FOO_PP_STRINGIZE(x) FOO_PP_STRINGIZE_I(x)
#define FOO_PP_STRINGIZE_I(x) #x
#define FOO_INCLUDE(x) FOO_PP_STRINGIZE(FOO_PP_IDENTITY(FOO_BASE_DIR)x)
利用例:
#include FOO_INCLUDE(bar.hpp)
この例ではc:/usr/include/foo/bar.hpp
がincludeされる。
std::string
に一気に読み込むstd::ifstream ifs("hoge");
std::istreambuf_iterator<char> first(ifs);
std::istreambuf_iterator<char> last;
std::string data(first, last);
1行にまとめるときは括弧が必要(『Effective STL』第6項参照):
std::ifstream ifs("hoge");
std::string data((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());