我是否必须为每个不同的参数重载函数?
Do I have to overload functions for every different parameter?
我想创建一个函数来简化 list/vector。我可以在 python:
完成
i = [1, 2, 3, 4, 5]
f = [1.1, 2.2, 3.3, 4.4, 5.5]
s = ["one", "two", "three", "four", "five"]
def simplify(lst):
if len(lst) == 0:
return 0
tmp = lst[0]
for x in range(1, len(lst)):
tmp += lst[x]
print(tmp)
return tmp
simplify(i)
simplify(f)
simplify(s)
但对于 C++,我必须为许多变量类型(long long
、double
、int
、string
、char
编写相同的函数).
我的问题是,我可以像在 python 中那样用 C++ 做吗? (为多种类型创建一个函数)
My question is, can I do in c++ like I did in python? (creating a single function for multiple types)
差不多。 C++ 函数模板不是函数,但使用它看起来与函数没有区别。
如果序列为空,您也将难以选择 -1
作为结果,因为 -1
不是字符串。
template <typename Range>
std::ranges::range_value_t<Range> simplify(Range && range) {
auto it = std::ranges::begin(range);
if (it == std::ranges::end(range)) return -1; // this will fail for strings
auto result = *it++;
for (; it != std::ranges::end(range); ++it) {
result += *it;
}
std::cout << result; // I assume this is for testing the function?
return result;
}
如果您对如何处理空输入做出不同的选择,标准库中有一个与您的函数非常相似的函数:
template <typename Range>
std::ranges::range_value_t<Range> simplify(Range && range) {
std::ranges::range_value_t<Range> zero {}; // 0 for numbers, empty string for strings, etc.
return std::accumulate(std::ranges::begin(range), std::ranges::end(range), zero);
}
int main() {
std::vector<int> i {1, 2, 3, 4, 5};
std::vector<double> f {1.1, 2.2, 3.3, 4.4, 5.5};
std::vector<std::string> s {"one", "two", "three", "four", "five"};
std::cout << simplify(i);
std::cout << simplify(f);
std::cout << simplify(s);
}
我想创建一个函数来简化 list/vector。我可以在 python:
完成i = [1, 2, 3, 4, 5]
f = [1.1, 2.2, 3.3, 4.4, 5.5]
s = ["one", "two", "three", "four", "five"]
def simplify(lst):
if len(lst) == 0:
return 0
tmp = lst[0]
for x in range(1, len(lst)):
tmp += lst[x]
print(tmp)
return tmp
simplify(i)
simplify(f)
simplify(s)
但对于 C++,我必须为许多变量类型(long long
、double
、int
、string
、char
编写相同的函数).
我的问题是,我可以像在 python 中那样用 C++ 做吗? (为多种类型创建一个函数)
My question is, can I do in c++ like I did in python? (creating a single function for multiple types)
差不多。 C++ 函数模板不是函数,但使用它看起来与函数没有区别。
如果序列为空,您也将难以选择 -1
作为结果,因为 -1
不是字符串。
template <typename Range>
std::ranges::range_value_t<Range> simplify(Range && range) {
auto it = std::ranges::begin(range);
if (it == std::ranges::end(range)) return -1; // this will fail for strings
auto result = *it++;
for (; it != std::ranges::end(range); ++it) {
result += *it;
}
std::cout << result; // I assume this is for testing the function?
return result;
}
如果您对如何处理空输入做出不同的选择,标准库中有一个与您的函数非常相似的函数:
template <typename Range>
std::ranges::range_value_t<Range> simplify(Range && range) {
std::ranges::range_value_t<Range> zero {}; // 0 for numbers, empty string for strings, etc.
return std::accumulate(std::ranges::begin(range), std::ranges::end(range), zero);
}
int main() {
std::vector<int> i {1, 2, 3, 4, 5};
std::vector<double> f {1.1, 2.2, 3.3, 4.4, 5.5};
std::vector<std::string> s {"one", "two", "three", "four", "five"};
std::cout << simplify(i);
std::cout << simplify(f);
std::cout << simplify(s);
}