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

2017-11-05 20:17:57 +08:00
 fyyz

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

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 函数模板只能接收这些类型,应该怎么做呢?

1957 次点击
所在节点    C
4 条回复
ipwx
2017-11-05 20:32:18 +08:00
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
2017-11-05 21:09:58 +08:00
enable_if/static_assert
fyyz
2017-11-05 21:39:43 +08:00
@ipwx
@gnaggnoyil
@framlog
谢谢大家,代码已经写好并且编译通过了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403750

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX