class MaxSizeRegistry
{
public:
template <class T> class Initializer
{
public:
Initializer(void)
{
if(max_size < sizeof(T)) max_size = sizeof(T);
}
};
static std::size_t get_max_size(void)
{
return max_size;
}
private:
static std::size_t max_size;
};
std::size_t MaxSizeRegistry::max_size = 1;
class Enemy_01
{
int x, y, z;
};
class Enemy_02
{
int x; double d[3];
};
class Enemy_03
{
int x;
};
// これはEnemy.cppに書く
namespace {
MaxSizeRegistry::Initializer<Enemy_01> enemy_01;
MaxSizeRegistry::Initializer<Enemy_02> enemy_02;
MaxSizeRegistry::Initializer<Enemy_03> enemy_03;
}
#include <iostream>
#include <cstdlib>
void * test_alloc(std::size_t size)
{
std::cout << "alloc size: " << size << std::endl;
return malloc(size);
}
int main(void)
{
std::cout << "sizeof(Enemy_01) * 100 = " << sizeof(Enemy_01) * 100 << std::endl;
std::cout << "sizeof(Enemy_02) * 100 = " << sizeof(Enemy_02) * 100 << std::endl;
std::cout << "sizeof(Enemy_03) * 100 = " << sizeof(Enemy_03) * 100 << std::endl;
void * strage = test_alloc(MaxSizeRegistry::get_max_size() * 100);
/* ・・・ */
free(strage);
return 0;
}