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

Is there a way to have type literals in C++?

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

但是,我想知道如何才能 select 从变体中提取特定类型。

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

我想要的(伪代码):

std::string type;

TYPE get_type(std::string) { ... }

get_type(type) new_variable();

使用连续传递样式,排序。

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 魔法。