现在,我正在尝试用C ++创建一个原型动态类型系统来回答Stack Overflow上的另一个问题。
但是,我想知道如何从变体中选择特定类型。
我想要的基本上是将一个键直接转换为一个类型的函数,然后让一个程序根据该类型文字构造一个类型。
我想要的(伪代码):
{{1}}
答案 0 :(得分:1)
使用延续传递样式,sortof。
template<class T>struct tag{using type=T;};
template<class Tag>using type_t=typename Tag::type;
#define TYPEOF(...) type_t<std::decay_t<decltype(__VA_ARGS__)>>
template<class F>
auto get_type( std::string s, F f ) {
if (s=="int")
return f(tag<int>{});
if (s=="double")
return f(tag<double>{});
}
使用:
void do_stuff( std::string type ) {
int x = get_type( type, [&](auto tag) {
TYPEOF(tag) var;
return 7;
});
}
在这种情况下,var
是type
命名的类型的变量。
请注意,所有分支都将被编译,因此所有分支都必须生成有效的代码。
否则,不,这是不可能的,除非constexpr
魔法。