STL带有许多类型特征,如std::is_pointer
,std::is_reference
等......
让我说我有一个班级
class A
{
using type_member = void;
}
是否有任何类型特征用于控制类型成员并检查它是否存在?
像is_type_member_exist<typename A::type_member>();
如果C ++ 17存在一个解决方案并且对C ++ 2003感到好奇,我很好奇(在工作中我需要这个并且我有vs2010,它有点C ++ 11支持但不完整)。
答案 0 :(得分:3)
如果type_member
为public
(而不是问题中的private
),我认为您可以执行类似
#include <iostream>
template <typename X>
struct with_type_member
{
template <typename Y = X>
static constexpr bool getValue (int, typename Y::type_member * = nullptr)
{ return true; }
static constexpr bool getValue (long)
{ return false; }
static constexpr bool value { getValue(0) };
};
class A
{
public:
using type_member = void;
};
int main ()
{
std::cout << with_type_member<int>::value << std::endl; // print 0
std::cout << with_type_member<A>::value << std::endl; // print 1
}
希望这有帮助。