有没有办法在C ++中使用类型文字?

时间:2015-08-08 01:33:33

标签: c++ type-conversion dynamic-typing static-typing

现在,我正在尝试用C ++创建一个原型动态类型系统来回答Stack Overflow上的另一个问题。

但是,我想知道如何从变体中选择特定类型。

我想要的基本上是将一个键直接转换为一个类型的函数,然后让一个程序根据该类型文字构造一个类型。

我想要的(伪代码):

{{1}}

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;
  });
}

在这种情况下,vartype命名的类型的变量。

请注意,所有分支都将被编译,因此所有分支都必须生成有效的代码。

否则,不,这是不可能的,除非constexpr魔法。