【发布时间】:2015-05-28 17:53:45
【问题描述】:
有没有办法将具有std::vector<T> 的struct 与任何其他类型区分开来?
如果T 是一个包含std::vector<T> 的结构,我有一些模板函数应该专门化,所以我正在寻找的是:
template<typename T> method(const T& object)
{
static_assert(!contains_vector<T>::value, "This method must be specialized");
// implementation
}
这样
struct Foo {
uint32_t foo;
float bar;
};
struct Bar {
uint16_t foo;
vector<float> bar;
}
contains_vector<float>::value == false;
contains_vector<Foo>::value == false;
contains_vector<Bar>::value == true;
我试图弄清楚如何通过<type_traits> 区分这种差异。
【问题讨论】:
-
为什么要调查某个类的实现细节?
-
听起来像是 XY 问题。你能解释一下为什么你需要区别对待包含
vector的东西吗? -
是什么阻止您从
xyz继承bar并使用is_base_of<xyz,bar>,或任何其他弯路? -
我有很多需要序列化的普通结构,它们都只包含基本类型(数字或枚举常量)或其他普通结构或结构/基本类型的向量。我需要编写一个模板特化来管理包含向量的结构(因为我必须序列化包含的元素,并且我必须确保不可能尝试使用没有模板特化的向量来序列化结构。
-
使用 is_pod 或 is_standard_layout 检测简单类型怎么样?
标签: c++ templates c++11 typetraits