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

标签 c++ templates containers

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

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);应该是编译错误。 `

最佳答案

你可以通过 static_assert() 来判断这两种类型的 value_type 是否相同:

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 代替:

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");

关于c++ - 将 C++ 模板参数限制为相同值类型的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20859950/

相关文章:

c++ - 在主窗口之前显示对话框

mysql - 将mysql数据导入kubernetes pod

apache-flex - 在边框容器周围放置一个滚动条

c++ - 为什么我的 C++ Boost ASIO HTTP 客户端返回不完整的响应?

c++ - 如何比较 char 或 string 变量是否等于某个字符串?

templates - 带有模板参数的 C++0x lambdas?

c++ - 是否必须在成员定义之外重复类模板 requires 子句?

c++ - C++-有什么方法可以为性能和封装构造常量数据?

Dockerfile 和 docker-compose 不更新新指令

c++ - QAbstractItemModel 与 QtQuick : Column is always 0 in the index