V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyyz
V2EX  ›  C

C++的模板函数能否只接受特定的类型

  •  
  •   fyyz · 2017-11-05 20:17:57 +08:00 · 1975 次点击
    这是一个创建于 2605 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如说我现在实现了一个函数:

    template<typename T>
    void append_str(T t)
    {
    	// do something
    }
    

    这里的 T 类型其实接收的是缓冲区的数据,而我的缓冲区其实就是 std::array<unsigned char,i>。

    array 里的类型一定是 unsigned char,但是 array 的长度是不确定的,有 128,256,1024,8196 这些长度。但是由于 array 本身也是模板类,所以会产生多个实例类型。

    现在我想让我的 append_str 函数模板只能接收这些类型,应该怎么做呢?

    4 条回复    2017-11-05 21:39:43 +08:00
    gnaggnoyil
        2
    gnaggnoyil  
       2017-11-05 20:41:44 +08:00
    具体到这个需求,可以不需要 SFINAE.因为 C++语言标准要求在模板函数形参类型中没有被组成表达式的模板整数也必须可以通过实参类型推导,所以实现可以更简单的:

    template <std::size_t I> void append_str(std::array<unsigned char, I> &t){...}
    framlog
        3
    framlog  
       2017-11-05 21:09:58 +08:00
    enable_if/static_assert
    fyyz
        4
    fyyz  
    OP
       2017-11-05 21:39:43 +08:00
    @ipwx
    @gnaggnoyil
    @framlog
    谢谢大家,代码已经写好并且编译通过了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2551 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:43 · PVG 23:43 · LAX 07:43 · JFK 10:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.