我有这两个重载的运算符<<功能。我可以使用模板系统将这些功能压缩为1个功能吗?
std::ostream& operator<<(std::ostream& os, const std::vector<glm::vec3>& vertices){
for (auto i = vertices.begin(); i != vertices.end(); ++i){
os << glm::to_string(*i) << '\n';
}
return os;
}
std::ostream& operator<<(std::ostream& os, const std::vector<glm::ivec3>& vertices){
for (auto i = vertices.begin(); i != vertices.end(); ++i){
os << glm::to_string(*i) << '\n';
}
return os;
}
答案 0 :(得分:2)
是的,您可以使用功能模板和[5, 1, 4, 0, 6, 2, 3]
,以便拥有适用于std::enable_if
和glm::vec3
的单一功能:
glm::ivec3
如果您想支持使用template <typename T>
auto operator<<(std::ostream& os, const std::vector<T>& vertices)
-> std::enable_if_t<
std::is_same<T, glm::vec3>::value || std::is_same<T, glm::ivec3>::value,
std::ostream&>
{
for (auto i = vertices.begin(); i != vertices.end(); ++i){
os << glm::to_string(*i) << '\n';
}
return os;
}
的每种类型,您可以使用表达式SFINAE :
glm::to_string