名前空間を「リセット」する方法があるかどうか疑問に思っていました。定義を使用して別の名前空間でいくつかのテンプレート構造体を特殊化したいので、私は主にこれを求めています。
これは、私が達成したいことの簡単な例です。
namespace base {
template<typename>
struct my_traits;
}
// specialize base::my_traits for TYPE
// obviously, this does not work
#define MAKE_SPECIALIZED_TRAITS(TYPE) \
namespace ::base { \
template<> \
struct my_traits<TYPE> { \
typedef TYPE type; \
enum { size = TYPE::size }; \
}; \
}
namespace spec {
struct my_struct {
enum { size = 3 };
};
MAKE_SPECIALIZED_TRAITS(my_struct)
}
そのようなことは可能ですか?もしそうなら、これをどのように実装しますか?