static_assert 可以检查类型是否是向量吗?
static_assert 可以检查类型是否是向量吗? IE 中,int
会引发断言,而 vector
则不会。
我正在考虑以下内容:
static_assert(decltype(T) == std::vector, "Some error")
Can static_assert check if a type is a vector? IE, an int
would raise the assertion, whereas a vector<int>
would not.
I'm thinking of something along the lines of:
static_assert(decltype(T) == std::vector, "Some error")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是的。考虑以下元函数:
只需将其用作
static_assert
中的表达式即可。Yes. Consider the following meta function:
Simply use that as your expression in
static_assert
.c++0x:
c++0x:
一个通用的解决方案。给定一个类型和一个模板,检查该类型是否是后者的实例:
有了这个,则以下内容将为真:
因此您将使用:
注意:如果
T
是const
,这不能直接工作。因此,测试类似is_instance_of_a_given_class_template
is_instance_of_a_given_class_template< std::decay_t,std::vector> 代替。
A general solution. Given a type, and a template, to check if the type is an instance of the latter:
With this, then the following will be true:
and therefore you would use:
Note: If
T
isconst
, this won't work directly. So test for something likeis_instance_of_a_given_class_template< std::decay_t<T> ,std::vector>
instead.是。
用法:
演示。
注意:我的(复杂的)答案有一个限制,如果
T
是从vector<>公开继承的,则它的计算结果为
。如果 T 具有来自true
。vector
的private
/protected
继承,可能会导致编译器错误。只是保留下来作为记录,不应该使用这种方式! :)Yes.
Usage:
Demo.
Note: My (complicated) answer has a limitation that it evaluates to
true
if ifT
is publically inherited fromvector<>
. It might result in compiler error if T hasprivate
/protected
inheritance fromvector<>
. Just keeping it for record, that this way should not be used !! :)