gpt4 book ai didi

c++ - 如何在 C++ 中编写整数和平凡类型之间的双向映射?

转载 作者:行者123 更新时间:2023-12-03 23:33:15 25 4
gpt4 key购买 nike

我想在 int 之间编写一个双射和 C++ 琐碎类型,例如 doublefloat .
双射在编译时是已知的。
我想像这样使用它(大写表示宏):

INIT(42,float)
INIT(-17,double)

#include <type_traits>

int main() {
const int a = TYPE_TO_INT(float);
static_assert(a==42);
INT_TO_TYPE(-17) pi;
static_assert(std::is_same<double,decltype(pi)>::value);
return 0;
}

最佳答案

您可以展开 INIT如果您想避免使用宏,但它确实可以很好地清理样板:

template <typename T> struct TypeToInt {};
template <int T> struct IntToType {};

#define INIT(i, t) \
template <> struct TypeToInt<t> { constexpr static int value = i; }; \
template <> struct IntToType<i> { using type = t; };

INIT(42,float);
INIT(-17,double);

int main() {
const int a = TypeToInt<float>::value;
static_assert(a==42);
IntToType<-17>::type pi;
static_assert(std::is_same<double,decltype(pi)>::value);
return 0;
}

关于c++ - 如何在 C++ 中编写整数和平凡类型之间的双向映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66991926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com