【发布时间】:2013-12-15 11:03:25
【问题描述】:
我需要一个可以这样调用的模板:
int x = type_exists< std::vector<int> >::value;
如果#include <vector> 早先在源中存在(显式或传递),则应将 x 设置为 1,否则应将 x 设置为 0。
可以用 C++ 实现吗?我使用的是 GCC,所以 GCC 扩展也可以。
稍微改变一下调用语法也可以。
两次运行 C++ 编译器是不行的:首先只是为了弄清楚我们是否得到了编译错误。
【问题讨论】:
-
你会用这样的功能做什么?
-
一般情况下,您只能使用已声明的 C++ 中的名称。语言中没有通用的“反射”或“裸词”支持,可以让您检查解析器的状态。对于类模板成员来说有点不同,但很特别。
-
@pts 正如对
has_destructor的明确解释,您需要声明要测试的名称,然后它可以工作:coliru.stacked-crooked.com/a/4b39006dfae715d0。如main的第二部分所示,一个潜在的问题是,如果您声明一个已定义的类,则必须在定义的相同范围(和命名空间)内进行。 -
@gx_:
has_destructor如何为vector<int>这样的模板工作?我该如何预先声明?
标签: c++ template-meta-programming sfinae typetraits