[ create a new paste ] login | about

Link: http://codepad.org/V5KiJRBs    [ raw code | output | fork ]

C++, pasted on Sep 18:
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;
}


Output:
1
2
3
4
sizeof(Enemy_01) * 100 = 1200
sizeof(Enemy_02) * 100 = 2800
sizeof(Enemy_03) * 100 = 400
alloc size: 2800


Create a new paste based on this one


Comments: