プリプロセッサで簡易生成

vec::value のテンプレートの特殊化をプリプロセッサで簡易生成する為のコード。
DirectX とかの定義が楽になる…か?

#include 
#include 

#include "vec/type_traits/value.hpp"
#include "vec/preprocessor/make_type_traits_value.hpp"

/**
    D3DVECTOR の特殊化
 */
KMT_EX_PP_MATH_VEC_MAKE_TYPE_TRAITS_VALUE(D3DVECTOR, float);

/**
    自前ベクトル
 */
struct my_vec{
    double x, y, z;
};
KMT_EX_PP_MATH_VEC_MAKE_TYPE_TRAITS_VALUE(my_vec, double);

#include "vec/preprocessor/undef_make_type_traits_value.hpp"    // #undef

namespace vec = kmt_ex::math::vec;

int
main(){
    
    std::cout << typeid(vec::value::type).name() << "\n"; // float
    std::cout << typeid(vec::value::type).name()    << "\n"; // double
    
    getchar();
    return 0;
}
/**
    vec::value のテンプレートの特殊化の簡易生成を行う
    
    ※内部で namespace でくくっているので、
     グローバル空間での定義を行う
 */
#ifndef KMT_EX_PP_MATH_VEC_MAKE_TYPE_TRAITS_VALUE

#define KMT_EX_PP_MATH_VEC_MAKE_TYPE_TRAITS_VALUE(class_t, value_t)    \
namespace kmt_ex{ namespace math{ namespace vec{                    \
                                                                    \
template<>                                                            \
struct value{                                                \
    typedef value_t type;                                            \
};                                                                    \
                                                                    \
}; }; };            // namespace kmt_ex{ namespace math{ namespace vec{