gpt4 book ai didi

c++ - 如何将类似的重载函数折叠成一个 C++ 函数?

转载 作者:行者123 更新时间:2023-11-30 01:12:42 24 4
gpt4 key购买 nike

假设我有以下两个相同的函数,但参数不同,我想将它们合并为一个函数。我该怎么做?

template <typename T>
ostream& operator<<(ostream& os, const set<T>& v) {
os << "{";
char comma[3] = {'\0', ' ', '\0'};
for (const auto& e : v) {
os << comma << e;
comma[0] = ',';
}
return os << "}";
}

template <typename F, typename S>
ostream& operator<<(ostream& os, const map<F, S>& v) {
os << "{";
char comma[3] = {'\0', ' ', '\0'};
for (const auto& e : v) {
os << comma << e;
comma[0] = ',';
}
return os << "}";
}

这是假设运算符 <<(ostream& os, const pair< K, V > p) 已经定义,因此映射 cout << e 应该可以正常工作。

我想要类似于以下伪代码的东西:

template <typename F, typename S, typename X=set or map>
ostream& operator<<(ostream& os, const X<F, S>& v) {
os << "{";
char comma[3] = {'\0', ' ', '\0'};
for (const auto& e : v) {
os << comma << e;
comma[0] = ',';
}
return os << "}";
}

cout << aMap << aSet; // should work!

最佳答案

使用模板。将公共(public)代码拉入一个单独的函数。

template <typename T>
ostream& WriteRange(ostream& os, const T& v) {
os << "{";
char comma[3] = {'\0', ' ', '\0'};
for (const auto& e : v) {
os << comma << e;
comma[0] = ',';
}
return os << "}";
}

template <typename T>
ostream& operator<<(ostream& os, const set<T>& v) {
return WriteRange(os, v);
}

template <typename F, typename S>
ostream& operator<<(ostream& os, const map<F, S>& v) {
return WriteRange(os, v);
}

关于c++ - 如何将类似的重载函数折叠成一个 C++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33583448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com