比如说我现在实现了一个函数:
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 函数模板只能接收这些类型,应该怎么做呢?
1
ipwx 2017-11-05 20:32:18 +08:00
|
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){...} |
3
framlog 2017-11-05 21:09:58 +08:00
enable_if/static_assert
|
4
fyyz OP |