坐标的结构;
struct point{
int x_, y_;
}
假设我们有一个如上定义的坐标。除了这个结构,我想创建一个函数,它接受用户想要的参数(例如,一个函数来找到三个或更多点的重心)。所以我决定使用可变参数模板。但我认识到我缺乏关于可变参数模板的信息。
至于计算重心,你应该添加所有x,并将总和除以元素数。为y元素做这件事并返回一点。你能带我一个实现这个的方法。
答案 0 :(得分:2)
C ++ 17的折叠表达式使这变得轻而易举:
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.verify_mode = ssl.CERT_NONE
print opArg
sI = connect.SmartConnect(host='',
user='',
pwd='',
port=443,
sslContext=context)
content = sI.content
objView = content.viewManager.CreateContainerView(content.rootFolder,[vim.VirtualMachine],True)
vmList = objView.view
for vm in vmList:
vm_obj = vm
答案 1 :(得分:2)
如果你正在使用C ++ 14,你可以简单地遍历constexpr函数中的点,例如像这样(从Quentin's answer借来的例子):
#include <iostream>
struct point{
int x_, y_;
};
template <class... Points>
constexpr point barycentre(Points... points) {
point ps[] = {points...};
point result {0, 0};
for (std::size_t i = 0; i < sizeof...(points); i++) {
result.x_ += ps[i].x_;
result.y_ += ps[i].y_;
}
result.x_ /= sizeof...(points);
result.y_ /= sizeof...(points);
return result;
}
int main() {
constexpr auto bary = barycentre(point{0, 0}, point{2, 2});
std::cout << "(" << bary.x_ << ", " << bary.y_ << ")\n";
}
还有一些C ++ 11:
#include <iostream>
#include <array>
#include <type_traits>
struct point{
int x_, y_;
};
template <std::size_t I, std::size_t N>
constexpr typename std::enable_if<I + 1 == N, point>::type barysum(std::array<point, N> const &points) {
return point{ points[I].x_, points[I].y_ };
}
template <std::size_t I, std::size_t N>
constexpr typename std::enable_if<I + 1 != N, point>::type barysum(std::array<point, N> const &points) {
return point{ points[I].x_ + barysum<I+1>(points).x_, points[I].y_ + barysum<I+1>(points).y_ };
}
template <std::size_t N>
constexpr point barycentre_impl(std::array<point, N> const points_array) {
return point{ barysum<0>(points_array).x_ / static_cast<int>(N), barysum<0>(points_array).y_ / static_cast<int>(N)};
}
template <class... Pts>
constexpr point barycentre(Pts... pts) {
return barycentre_impl<sizeof...(Pts)>( {{pts...}} );
}
int main() {
constexpr auto bary = barycentre(point{0, 0}, point{2, 2});
std::cout << "(" << bary.x_ << ", " << bary.y_ << ")\n";
}
答案 2 :(得分:1)
初始化列表对于获取相同类型的元素更简单。
Point average(std::initializer_list<Point> list)
{
int x = 0, y = 0;
for(auto &i: list) {x += i.x_; y += i.y_;}
return {x / list.size(), y / list.size()};
}
Variadic模板在类型上是通用的,因此它不适合您的情况。它不会以任何方式使你的代码执行得更快,只会膨胀二进制文件。