首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将C++模板参数限制为相同值类型的容器

将C++模板参数限制为相同值类型的容器
EN

Stack Overflow用户
提问于 2013-12-31 16:04:19
回答 1查看 340关注 0票数 2

我有一个C++模板函数:

代码语言:javascript
复制
template<typename Input, typename Output>
void Process(const Input &in, Output *out) {
  ...
}
  1. 如果使用不同类型的容器调用它,如何使用友好的错误消息使其成为编译错误?例如,调用set<int> sout; Process(vector<int>(), &sout);应该可以工作,但是vector<unsigned> vout; Process(vector<int>(), &vout);应该是编译错误。
  2. 如果使用不可相互转换的容器调用它,如何使用友好的错误消息使其成为编译错误?例如,上面的调用应该可以工作,但是struct A {}; struct B {}; vector<B> vbout; Process(vector<A>(), &vbout);应该是编译错误。`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 16:07:19

您只需确认这两种类型的static_assert() s是相同的:

代码语言:javascript
复制
static_assert(std::is_same<typename Input::value_type, typename Output::value_type>::value,
              "the containers passed to Process() need to have the same value_type");

如果您希望您的类型是可转换的,则可以使用std::is_convertible

代码语言:javascript
复制
static_assert(std::is_convertible<typename Input::value_type, typename Output::value_type>::value,
              "the value_type of the source container passed to Process() needs to be convertible to the value_type of the target container");
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20859950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档