c++ - 类型特征以匹配指向集合的指针

标签 c++ templates c++11 sfinae typetraits

我正在编写一个 SFINAE 匹配类,它可以匹配指向集合类型的指针。

我们目前有 std::is_pointer 并且我写了:

// SFINAE test for const_iterator for member type
template <typename T>
class has_const_iterator{
private:
    typedef char True;
    typedef long False;

    template <typename C> static True test(typename C::const_iterator*) ;
    template <typename C> static False test(...);

public:
    enum { value = sizeof(test<T>(0)) == sizeof(char) };
};

如何在 std::enable_if 中同时使用 std::is_pointer 和 has_const_iterator,或者如何编写可以匹配指向集合类型的指针的新类型特征?谢谢。

最佳答案

template<class T>
struct is_pointer_to_collection 
     : std::integral_constant<bool, std::is_pointer<T>::value 
           && has_const_iterator<typename std::remove_pointer<T>::type>::value> {};

Demo .

关于c++ - 类型特征以匹配指向集合的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26312262/

相关文章:

c++ - 函数模板优先级

javascript - 在 underscore.js 模板引擎中运行模板中的模板(递归)

c++ - 带有模板函数名的可变参数模板

c++ - 什么时候在构造函数的类定义中通过普通查找找不到 mem-initializer-id?

c++ - 如何在类中分配多维数组?当行 > 列时会抛出错误?

c++ - 如何在 C++ 中循环执行再次要求输入的 switch-case 语句?

c++ - C++ 方法的 Visual Studio 2010 工具提示注释

c++ - 牛顿法调用函数 C++

c++ - 在 std::vector<unsigned char> 中将 std::wstring 编码为 UTF-16 的正确方法是什么?

c++ - 使用错误检查初始化 ifstream 的类成员初始值设定项?