bate's blog

調べたこと実装したことなどを取りとめもなく書きます。

共用体

id:malibu-bulldogさんに共用体を使うことを薦められたので、行列の要素として使うサンプルを作ったら良い感じだ。
こういう感じになるのでしょうか。

#include <iostream>

using namespace std;


union Elements
{
	float m[4][4];

	struct
	{
		float m00, m01, m02, m03,
		   m10, m11, m12, m13,
		   m20, m21, m22, m23,
		   m30, m31, m32, m33;
	};
};

class Matrix
{
public:
	Elements m_elements;
};

int main()
{
	Matrix m;
	for( int i = 0; i < 4; ++i )
	{
		for( int j = 0; j < 4; ++j )
		{
			if( i != j )
				m.m_elements.m[i][j] = 0.0f;
			else
				m.m_elements.m[i][j] = 1.0f;
		}
	}

	cout << m.m_elements.m00 << " " << m.m_elements.m01 << " " << m.m_elements.m02 << " " << m.m_elements.m03 << endl;
	cout << m.m_elements.m10 << " " << m.m_elements.m11 << " " << m.m_elements.m12 << " " << m.m_elements.m13 << endl;
	cout << m.m_elements.m20 << " " << m.m_elements.m21 << " " << m.m_elements.m22 << " " << m.m_elements.m23 << endl;
	cout << m.m_elements.m30 << " " << m.m_elements.m31 << " " << m.m_elements.m32 << " " << m.m_elements.m33 << endl;

	cout << endl;

	for( int i = 0; i < 4; ++i )
	{
		for( int j = 0; j < 4; ++j )
			cout << m.m_elements.m[i][j] << " ";
		cout << endl;
	}
}