【发布时间】:2019-03-28 10:14:00
【问题描述】:
我想检查两种类型是否属于同一个模板。举个例子,我希望下面的 sn-p 代码返回 true,因为尽管内部元素的类型不同,但两个对象都是向量。
在编译时进行检查很重要(这就是函数是 constexpr 的原因)。
#include <iostream>
#include <type_traits>
#include <vector>
template <typename Container1, typename Container2> constexpr bool CheckTypes(Container1 c1, Container2 c2)
{
return std::is_same<Container1,Container2>::value;
}
int main()
{
std::vector<int> v1(100,0);
std::vector<double> v2(100,0);
std::cout << CheckTypes(v1,v2);
}
【问题讨论】:
-
如果你需要在编译时检查某些东西,你应该使用静态类型而不是变量。
-
但是它们的类型不一样...容器是一样的,不是实例化的类型。您可以使用
sizeof进行检查,但我不确定这样的解决方案有多优雅。 -
我希望它适用于任何容器。
-
为什么要检查这个?
-
@Sombrero 对 dup 不太满意。这个Q有点不同。 OP 以
std::vector为例,但他们的问题比这更笼统:“我想检查两种类型是否属于同一模板”。
标签: c++ sfinae typetraits