使用类型特征专门化字符串迭代器的模板功能

Shohreh

我有一个模板类,它接收两种模板类型T,如下所示:

Foo( T arg1,T arg2) 
{

}

此类中有一个函数T用作迭代器。此函数对整数类型的迭代器工作得很好,但对于std :: string类型的迭代器,应以不同的方式实现,

我应该:
首先为整数类型启用第一个函数,然后为
std :: string类型的迭代器专门化该函数

我应该怎么做?!

羔羊

说“类型的迭代器std::string”不是很清楚。您的意思是std :: string :: iterator或std :: iterator <std :: string>。我假设使用后者,因为您还提到了“整数类型的迭代器”,在这种情况下,以下实现了您想要的功能:

#include <iostream>
#include <vector>
#include <string>
#include <type_traits>

template< typename T >
void foo( typename std::enable_if< std::is_integral< typename T::value_type >::value, T >::type a, T b )
{
    std::cout << "integral iterator\n";
}

template< typename T >
void foo( typename std::enable_if< std::is_same< typename T::value_type, std::string >::value, T >::type a, T b )
{
    std::cout << "string iterator\n";
}

int main() 
{
    std::vector< std::string > vecStr;
    std::vector< int > vecInt;

    foo( vecStr.begin(), vecStr.end() );
    foo( vecInt.begin(), vecInt.end() );

    return 0;
}

请注意,这仅适用于迭代器(T需要具有公共typedef value_type,而普通指针则不需要)。

不过,您并没有给出明确的用例,因此我只能假设这就是您想要的。

如果您需要它与指针一起使用(因为指针从技术上讲是迭代器),则可以使用std :: is_pointer和std :: remove_pointer,但我将其留给读者练习。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

选择字符串文字类型以进行模板专门化

来自分类Dev

字符串化递归`std :: vector <std :: vector <... >>`而不使用部分模板函数专门化

来自分类Dev

字符串键入函数,模板专门化以使调用统一

来自分类Dev

boost :: static_visitor无法使用多种可能的类型来专门化功能模板

来自分类Dev

使用decltype尾随返回类型来专门化功能模板

来自分类Dev

C ++:数组的功能模板专门化

来自分类Dev

使用指令专门化的模板

来自分类Dev

部分专门化类型特征时,如何使用std :: decay?

来自分类Dev

模板指向功能的部分模板专门化

来自分类Dev

如何使用type_traits或模板功能专门化来巩固模板方法

来自分类Dev

如何使用type_traits或模板功能专门化来巩固模板方法

来自分类Dev

在模板专门化中使用非类型模板template参数

来自分类Dev

如何使用模板模板参数专门化类模板?

来自分类Dev

使用类模板的内部类模板专门化模板

来自分类Dev

模板构造器中的模板类专门化

来自分类Dev

模板构造器中的模板类专门化

来自分类Dev

名称空间中的功能模板专门化

来自分类Dev

如何测试是否存在模板功能专门化

来自分类Dev

明确专门化功能模板的正确方法

来自分类Dev

无法在线程中专门化功能模板

来自分类Dev

使用通用参考参数来专门化功能模板是否有意义?

来自分类Dev

错误C2893:无法使用CTPL专门化功能模板

来自分类Dev

返回类型对方法模板的专门化

来自分类Dev

为包含typedef的类型专门化模板

来自分类Dev

当类型是指针时,模板类方法专门化失败

来自分类Dev

返回类型对方法模板的专门化

来自分类Dev

统一函数使用模板专门化和接口来调用实例和原始类型

来自分类Dev

如何使用模板临时参数专门化模板

来自分类Dev

使用模板模板参数专门化基类

Related 相关文章

  1. 1

    选择字符串文字类型以进行模板专门化

  2. 2

    字符串化递归`std :: vector <std :: vector <... >>`而不使用部分模板函数专门化

  3. 3

    字符串键入函数,模板专门化以使调用统一

  4. 4

    boost :: static_visitor无法使用多种可能的类型来专门化功能模板

  5. 5

    使用decltype尾随返回类型来专门化功能模板

  6. 6

    C ++:数组的功能模板专门化

  7. 7

    使用指令专门化的模板

  8. 8

    部分专门化类型特征时,如何使用std :: decay?

  9. 9

    模板指向功能的部分模板专门化

  10. 10

    如何使用type_traits或模板功能专门化来巩固模板方法

  11. 11

    如何使用type_traits或模板功能专门化来巩固模板方法

  12. 12

    在模板专门化中使用非类型模板template参数

  13. 13

    如何使用模板模板参数专门化类模板?

  14. 14

    使用类模板的内部类模板专门化模板

  15. 15

    模板构造器中的模板类专门化

  16. 16

    模板构造器中的模板类专门化

  17. 17

    名称空间中的功能模板专门化

  18. 18

    如何测试是否存在模板功能专门化

  19. 19

    明确专门化功能模板的正确方法

  20. 20

    无法在线程中专门化功能模板

  21. 21

    使用通用参考参数来专门化功能模板是否有意义?

  22. 22

    错误C2893:无法使用CTPL专门化功能模板

  23. 23

    返回类型对方法模板的专门化

  24. 24

    为包含typedef的类型专门化模板

  25. 25

    当类型是指针时,模板类方法专门化失败

  26. 26

    返回类型对方法模板的专门化

  27. 27

    统一函数使用模板专门化和接口来调用实例和原始类型

  28. 28

    如何使用模板临时参数专门化模板

  29. 29

    使用模板模板参数专门化基类

热门标签

归档