Vector 〜その2〜
ずいぶん長い明日になってしまった…。
1回書かないと間が空いてしまうのは悪い癖。
って事で前回の続き。
#include
#include
#include
#include
// #############################################################################
// 前回作ったベクトルクラス
template<
unsigned int D,
typename T
>
struct Vector;
/** ############################################################################
各ベクトルの特性
*/
/** --------------------------------------------------------
ベクトル?
*/
template<
typename VecType
>
struct is_vector{
static const bool result = false;
};
template<
unsigned int D,
typename T
>
struct is_vector >{
static const bool result = true;
};
/**
DirectX 系の特性
*/
#ifdef D3DVECTOR_DEFINED
template<>
struct is_vector{
static const bool result = true;
};
#endif // #ifdef D3DVECTOR_DEFINED
/** --------------------------------------------------------
保持している値の型は?
*/
template<
typename T
>
struct vec_value_type{
typedef float type;
};
template<
unsigned int D,
typename T
>
struct vec_value_type >{
typedef T type;
};
/**
DirectX 系の特性
*/
#ifdef D3DVECTOR_DEFINED
template<>
struct vec_value_type{
typedef float type;
};
#endif // #ifdef D3DVECTOR_DEFINED
/** --------------------------------------------------------
次元の取得
*/
template<
typename T
>
struct dimension{
static const unsigned int value = sizeof(T) / sizeof(vec_value_type::type);
};
int
main(){
std::cout << ( is_vector::result ? "ベクトルです" : "ベクトルじゃありません" )<< "\n";
std::cout << ( is_vector::result ? "ベクトルです" : "ベクトルじゃありません" )<< "\n";
std::cout << dimension::value << "次元" << "\n";
return 0;
}
/** ############################################################################
実行結果:
ベクトルです
ベクトルじゃありません
4次元
しかし、毎回ソースを載せると長い…。
もうちょっと小刻みでいったほうが読みやすいかしら?
もうソースを短くするようにしてみるか。