fyyz
V2EX  ›  C

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

  •  
  •   fyyz · Nov 5, 2017 · 2422 views
    This topic created in 3135 days ago, the information mentioned may be changed or developed.

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

    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 replies    2017-11-05 21:39:43 +08:00
    gnaggnoyil
        2
    gnaggnoyil  
       Nov 5, 2017
    具体到这个需求,可以不需要 SFINAE.因为 C++语言标准要求在模板函数形参类型中没有被组成表达式的模板整数也必须可以通过实参类型推导,所以实现可以更简单的:

    template <std::size_t I> void append_str(std::array<unsigned char, I> &t){...}
    framlog
        3
    framlog  
       Nov 5, 2017
    enable_if/static_assert
    fyyz
        4
    fyyz  
    OP
       Nov 5, 2017
    @ipwx
    @gnaggnoyil
    @framlog
    谢谢大家,代码已经写好并且编译通过了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1014 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:15 · PVG 07:15 · LAX 16:15 · JFK 19:15
    ♥ Do have faith in what you're doing.