【发布时间】:2015-09-25 22:18:34
【问题描述】:
假设我有一个结构 Foo,我想确定 Foo 内部是否有一个 int。
struct Foo { int a; char c; };
has_int<Foo>::value; // should be true
这是我真正想要的最基本形式,检查特定类型:
has_type<Foo, int>::value;
如果我知道如何执行上述操作,我可以将其转化为我的最终目标:
has_pointer<Foo>::value; // false
struct Bar { int a; void *b; };
has_pointer<Bar>::value; // true
至于我尝试过的,很难上手,我能想到的最好的就是如果我能得到一个包含在一个结构中的类型的包,我可以写剩下的:
template <typename... Ts>
constexpr bool any_is_pointer() noexcept {
return (... || std::is_pointer_v<Ts>);
}
我所要求的似乎很可能是不可能的。我找不到副本,但我很惊讶我找不到,所以它可能就在那里。
【问题讨论】:
-
这是不可能的,C++ 没有反射。但是,对于
std::tuple之类的东西,它非常简单。 -
基本上,您需要反思。 C++ 不做反射。但我不禁想知道:假设您以某种方式设法实现
has_int- 您打算如何使用它?您要解决的真正问题是什么? -
@IgorTandetnik 我处于需要小心处理包含指针或引用的结构的情况。关键是要决定在编译时允许哪些操作。我真的无法详细解释。
-
我对内置的一无所知。您在运行时不需要这个,所以您是否考虑过使用第三个程序来解析文件并生成将与您的程序的其余部分一起编译的适当源代码?
-
在我们有可用的静态反射提案之前,请检查:reddit.com/r/cpp/comments/3lh8me/…
标签: c++ templates c++11 template-meta-programming sfinae