[{"id":38857,"web_url":"https://patchwork.libcamera.org/comment/38857/","msgid":"<a1399e80-7d78-4d45-9970-890a56746e95@ideasonboard.com>","date":"2026-05-11T12:20:27","subject":"Re: [PATCH v2] libcamera: bound_method: Use std::apply","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 05. 11. 13:11 keltezéssel, Laurent Pinchart írta:\n> Now that libcamera uses C++17, we can use std::apply to replace the\n> custom implementation.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n> Changes since v1:\n> \n> - Drop private invokePack() overload\n> - Use lambda function and std::move() to avoid copy\n> ---\n\nLooks ok to me.\n\nReviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\n\n>   include/libcamera/base/bound_method.h | 22 ++++++++--------------\n>   1 file changed, 8 insertions(+), 14 deletions(-)\n> \n> diff --git a/include/libcamera/base/bound_method.h b/include/libcamera/base/bound_method.h\n> index 9b42a8a1e8ca..f11159e8a0a4 100644\n> --- a/include/libcamera/base/bound_method.h\n> +++ b/include/libcamera/base/bound_method.h\n> @@ -90,25 +90,19 @@ class BoundMethodArgs : public BoundMethodBase\n>   public:\n>   \tusing PackType = BoundMethodPack<R, Args...>;\n>   \n> -private:\n> -\ttemplate<std::size_t... I>\n> -\tvoid invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)\n> -\t{\n> -\t\t[[maybe_unused]] auto *args = static_cast<PackType *>(pack);\n> -\n> -\t\tif constexpr (!std::is_void_v<R>)\n> -\t\t\targs->ret_ = invoke(std::forward<Args>(std::get<I>(args->args_))...);\n> -\t\telse\n> -\t\t\tinvoke(std::forward<Args>(std::get<I>(args->args_))...);\n> -\t}\n> -\n> -public:\n>   \tBoundMethodArgs(void *obj, Object *object, ConnectionType type)\n>   \t\t: BoundMethodBase(obj, object, type) {}\n>   \n>   \tvoid invokePack(BoundMethodPackBase *pack) override\n>   \t{\n> -\t\tinvokePack(pack, std::make_index_sequence<sizeof...(Args)>{});\n> +\t\tauto *argsPack = static_cast<PackType *>(pack);\n> +\n> +\t\tstd::apply([&](Args &&...args) {\n> +\t\t\tif constexpr (!std::is_void_v<R>)\n> +\t\t\t\targsPack->ret_ = invoke(std::forward<decltype(args)>(args)...);\n> +\t\t\telse\n> +\t\t\t\tinvoke(std::forward<decltype(args)>(args)...);\n> +\t\t}, std::move(argsPack->args_));\n>   \t}\n>   \n>   \tvirtual R activate(Args... args, bool deleteMethod = false) = 0;\n> \n> base-commit: 500c2320619a47bd01d1ffe69ca4cc6eae6e00e8","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 5FC68BDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 11 May 2026 12:20:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 82F8062E9D;\n\tMon, 11 May 2026 14:20:33 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 26D2F62DC4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 11 May 2026 14:20:32 +0200 (CEST)","from [192.168.33.37] (185.182.215.166.nat.pool.zt.hu\n\t[185.182.215.166])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id ED291593;\n\tMon, 11 May 2026 14:20:24 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Cao3TeBY\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1778502025;\n\tbh=zNCRHCDGI38yR78yULhPLd87fFICjAlHuKb295dm93Q=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=Cao3TeBY5aWb4zKjSEzFmqd7fE8gYsaDgAzuON9x94kPhKp3xtNZfBVHCX5PW/m6Z\n\tgtaVPUG8eWxyJMBpBmcNiZYxwnewyv6AV3YuErawH2CTAkzr5k2uTd8orgINrkOSis\n\tccVt3QGsUSqTL44oWSnjIePgX1ewg97ZyqGjUszI=","Message-ID":"<a1399e80-7d78-4d45-9970-890a56746e95@ideasonboard.com>","Date":"Mon, 11 May 2026 14:20:27 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2] libcamera: bound_method: Use std::apply","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20260511111121.3042550-1-laurent.pinchart@ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260511111121.3042550-1-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]