C++ - 将类型映射到枚举
可以使编译时 Type ->枚举系列
映射?
用一个例子来说明:
比方说,我有一些 Type
和一个枚举值:
typedef int Type;
enum Enumerated { Enum1, Enum2, Enum3, Enum4 };
现在我以某种方式声明以下内容:“让我们关联 Enum1
和 枚举4
类型为 Type
(还不知道如何实现)。
现在我希望能够检查以下内容(最好是在编译时使用 mpl 完成):
如果某些任意类型和枚举实际上相互映射:
template <typename ArbitraryType, Enumerated E>
struct check_at_compile_time {
// Somehow tricky evaluate this
static const bool value;
};
,结果如下:
check_at_compile_time<Type, Enum1>::value evaluates to TRUE
check_at_compile_time<Type, Enum2>::value evaluates to FALSE
check_at_compile_time<Type, Enum4>::value evaluates to TRUE
check_at_compile_time<int, Enum3>::value evaluates to FALSE
>如果有人知道实现此目的的好方法,请帮助我。也许使用 boost::mpl
的东西,我不确定。
谢谢。
Is is possible to make compilation-time Type -> Enum Series
mapping?
Illustrating with an example:
Let's say, I have some Type
and a enumerated value:
typedef int Type;
enum Enumerated { Enum1, Enum2, Enum3, Enum4 };
and now I somehow state the following: "let's associate Enum1
and Enum4
with type Type
(don't know how to implement this yet).
Now I want to be able to check the following (better to be done using mpl in compilation time):
If some arbitrary type and enum are actually being mapped to each other:
template <typename ArbitraryType, Enumerated E>
struct check_at_compile_time {
// Somehow tricky evaluate this
static const bool value;
};
so that the results are the following:
check_at_compile_time<Type, Enum1>::value evaluates to TRUE
check_at_compile_time<Type, Enum2>::value evaluates to FALSE
check_at_compile_time<Type, Enum4>::value evaluates to TRUE
check_at_compile_time<int, Enum3>::value evaluates to FALSE
If someone knows a nice way to implement this, please help me. Maybe something using boost::mpl
, I'm not sure.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
即使没有 boost.mpl,你也可以这样做:
并且你检查你可以这样做:
未经测试,但应该像这样工作。
You can do it this way even without boost.mpl:
And you check you can do this way:
Untested but should work like this.