Linux下管理腾龙镜头:开源CLI工具实现固件更新与参数调校

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

最近看到 Hacker News 上有人发布了一个很有意思的开源项目:Linux 下的 Tamron Lens Utility 替代方案。用过腾龙镜头的人应该都清楚,官方那个调参工具一直只有 Windows 和 macOS 版本,Linux 用户想改对焦环方向、设置焦点预设按钮、更新镜头固件,只能去借一台 Windows 电脑或者开虚拟机。这个项目等于是把官方 Lens Utility 的核心功能搬到了 Linux 上,用命令行和 Python 直接跟镜头通信。

这个项目最值得关注的地方,不是它 UI 有多漂亮,而是它解决了“ Linux 能不能给腾龙镜头升级固件”这个长期没人管的痛点。整个工具基于 USB 直连和 libusb 通信,不需要额外的硬件盒子,也不需要 Windows 虚拟机。从项目思路看,它把官方工具能做的几件事拆成了清晰的子命令:读取镜头型号与固件版本、读取当前自定义设置、修改对焦环旋转方向与按键功能、写入新的固件文件。对摄影师来说,这意味着以后在 Linux 笔记本上就可以完成镜头维护和调参。

这篇文章会按 CSDN 读者的习惯把整个项目拆开讲:先给核心能力速览,再讲 Linux 环境准备、安装部署、启动方式、功能验证、脚本化批量任务、资源占用观察、常见问题排查和最佳实践。如果你平时用 Ubuntu / Debian / Arch 这类发行版,又恰好手里有支持 TAMRON Lens Utility 的镜头,建议收藏备用。

先说清楚一个前提:这个项目目前以命令行工具为主,没有官方那种图形化界面,也不是腾龙官方出品。所有操作都要在终端里完成,优点是容易做成脚本流程,缺点是第一次使用需要稍微多花十分钟。下面的内容以通用 Linux 部署思路展开,具体命令以项目仓库 README 为准。

1. 核心能力速览

能力项 说明
项目类型 开源镜头工具,Linux 下替代官方 Tamron Lens Utility
支持平台 Linux(Windows / macOS 未验证),依赖 USB 设备访问
连接方式 镜头通过 USB 适配器 / 底座与电脑连接
主要功能 读取镜头信息与固件版本、读写自定义设置、更新固件
操作方式 CLI 命令行,可脚本化
固件更新 支持,但需要自行准备合法固件文件,风险自负
GUI 界面 项目以 CLI 为主,是否有 Web 界面需看仓库最新状态
批量任务 原生未内置批量队列,可通过 Shell / Python 脚本封装
API 服务 未确认内置 API,可自行用 Python 封装为本地 HTTP 服务
资源占用 轻量级,CPU / 内存占用极低;固件写入过程需保证 USB 稳定
适合用户 Linux 摄影师、镜头维护爱好者、需要自动化镜头管理的人

这里要特别强调一点:输入材料里没有给出具体的显存占用、GPU 要求这类信息,因为这个项目根本不吃显卡资源。它的核心硬件要求是 USB 通信稳定和数据线质量,和跑 AI 模型完全是两个方向。

2. 适用场景与使用边界

这个工具适合下面几类人:

第一类是日常以 Linux 为工作系统的摄影师。以前调一次镜头参数,要么开虚拟机、要么跑到 Windows 机器上,流程很割裂。现在直接在终端里改设置,思路清晰,而且每一步都有命令输出,能确认镜头到底写进了什么。

第二类是需要管理多支腾龙镜头的团队或个人。比如器材租赁、工作室、影视公司,常常要统一给一批镜头升级固件、统一设置对焦环方向。手动插拔每支镜头去点 Windows 图形界面效率很低,用命令行工具写一个循环脚本,一支一支处理,每支镜头跑完还能记录结果。

第三类是喜欢研究 USB 协议和镜头通信协议的开发者。这类工具开源之后,可以通过分析源码了解镜头自定义协议的细节,甚至可以自己扩展按键宏、自定义焦点预设配方。

但它也有明确的使用边界。

不能解决的问题是官方工具的完整 UI 体验。如果你习惯在图形界面里拖动滑块、即时预览,这个项目暂时达不到。另外,它不会替你下载固件,固件文件需要从腾龙官方渠道获取,这是版权和安全的底线。

更新固件属于高风险操作。镜头固件写入过程中断电、拔线、电脑休眠,都可能导致镜头变砖。强烈建议在备用镜头或者不急着用的镜头上先试验一次,确认流程没问题再处理主力镜头。

合规方面也要说清楚:开源替代工具本身只是一段通信程序,不包含腾龙官方固件内容;固件文件的版权归腾龙所有,必须从官方渠道获取。不要传播、破解、逆向或修改固件文件用于非授权用途。涉及个人器材的自定义设置,操作前请确认镜头来源合法、保修条款允许。

3. Linux 环境准备与前置条件

这个项目是典型的 USB 外设工具,环境准备主要集中在三块:Python 运行时、USB 设备访问权限、镜头与电脑的物理连接。

3.1 操作系统与内核

推荐使用主流发行版,Ubuntu 22.04 LTS / Debian 12 / Fedora 38 / Arch Linux 都行。只要内核支持 USB HID / USB ACM 设备即可,内核版本建议 5.15 以上。如果是嵌入式 Linux 或最小化系统,需要确认已经装了 usbutils 和 pciutils。

3.2 Python 与依赖

从项目形态推测,它大概率基于 Python + PyUSB / libusb 实现。准备环境时可以用下面的通用流程:

# 安装系统级依赖,Ubuntu / Debian 系
sudo apt update
sudo apt install -y python3 python3-pip python3-venv git build-essential \
    libusb-1.0-0-dev pkg-config usbutils

# Fedora / RHEL 系
sudo dnf install -y python3 python3-pip git gcc gcc-c++ libusb1-devel usbutils

# Arch Linux
sudo pacman -S --needed python python-pip git base-devel libusb usbutils

3.3 USB 设备访问权限

Linux 下最容易踩的坑就是权限问题。普通用户直接访问 USB 设备会遇到 Permission denied ,需要配置 udev 规则。一个通用的做法是创建一个规则文件,把当前用户加入 plugdev 组,并给设备节点设置 0666 权限。

# 查看当前用户所属组,确认包含 plugdev
groups

# 如果没有 plugdev 组则创建
sudo groupadd plugdev

# 把当前用户加入 plugdev
sudo usermod -aG plugdev $USER

然后写 udev 规则。由于这个项目没有公布具体的 Vendor ID 和 Product ID,我建议你在连接镜头后用 lsusb 查看设备 ID,再生成规则:

# 连接镜头后查看 USB 设备
lsusb

如果看到类似 04a9 (佳能)、 04b0 (尼康)这类相机厂商 ID,或者镜头上位机特有的 ID,就把它替换到规则文件里。

# 创建 udev 规则文件,这里用通配符示例,实际要替换成项目仓库给出的 ID
sudo tee /etc/udev/rules.d/99-tamron-lens.rules <<'EOF'
# 替换 VID 和 PID 为实际设备的 Vendor ID / Product ID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="????", ATTRS{idProduct}=="????", MODE="0666", GROUP="plugdev"
EOF

# 重载规则
sudo udevadm control --reload-rules
sudo udevadm trigger

如果项目仓库告诉你使用 TAMRON_VID / TAMRON_PID 环境变量,也可以在运行前手动指定设备 ID。

3.4 物理连接与供电

这里必须提醒一句:镜头本体通常没有独立电源,使用时需要通过相机底座或腾龙官方的 USB 连接配件与电脑通信。更稳妥的做法是把镜头装在支持的相机机身上,再通过相机的 USB 口连接电脑,这样供电和通信都由相机完成。不同镜头系列支持的连接配件不同,具体以腾龙官方说明为准。

连接后先验证系统是否识别到设备:

# 查看 USB 总线上的设备
lsusb

# 查看内核日志,确认 USB 设备枚举过程有没有报错
dmesg | tail -20

# 查看串口设备节点(如果镜头以 ACM 方式注册)
ls -l /dev/ttyACM*

如果 /dev/ttyACM0 或类似节点存在,说明通信链路已经建立。如果只有 lsusb 能看到设备但节点不存在,大概率是驱动或模式切换问题。

4. 安装部署与启动方式

由于输入材料没有给出项目的具体安装命令,这里给一套标准的 Python CLI 项目安装模板。你拿到仓库后,按 README 里的实际命令替换即可。

4.1 克隆仓库

git clone https://example.com/tamron-lens-linux.git
cd tamron-lens-linux

如果这个项目是单文件脚本,也可能不需要 clone,直接下载一个 .py 文件就能跑。区分方法很简单:看仓库里有没有 requirements.txt pyproject.toml setup.py

4.2 创建虚拟环境并安装依赖

python3 -m venv .venv
source .venv/bin/activate

# 如果有依赖清单
pip install -r requirements.txt

# 如果需要以开发模式安装
pip install -e .

国内网络环境下,如果 pip 下载慢,可以临时用镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

4.3 运行前检查

启动前先确认三件事:镜头已经连接并开机;当前用户具备 USB 设备访问权限;没有其他程序占用 USB 设备(比如相机厂商的配套软件)。

# 查看当前用户组
id

# 查看 USB 设备权限
ls -l /dev/bus/usb/$(lsusb | awk 'NR==1{print $2}')/$(lsusb | awk 'NR==1{print $4}' | tr -d ':')

4.4 启动方式

这类 CLI 工具通常通过 --help / -h 输出全部子命令:

python tamron.py --help

如果是安装到虚拟环境的入口命令:

tamron --help

启动后预期输出里会列出可用子命令,例如 info get-config set-config flash-firmware 等。具体名称按项目文档为准。如果项目提供了 WebUI 或 API 服务,也会在 --help 里列出来,例如:

# 如果项目支持 Web 界面,通常类似这种形式
python tamron.py web --host 127.0.0.1 --port 8080
python tamron.py serve --address 0.0.0.0:9000

端口可以根据本机情况调整。如果遇到 Address already in use ,可以先用 ss -tlnp | grep <端口> 查看占用进程,再换端口启动。

5. 功能测试与效果验证

这个项目最核心的价值,是通过命令行验证“镜头能不能被 Linux 正确读写”。下面给出一套通用于 USB 镜头工具的验证流程,你拿到项目后按子命令名替换即可。

5.1 测试一:识别镜头型号与固件版本

测试目的是确认工具与镜头之间的通信链路是否正常。输入命令:

python tamron.py info

预期输出应当包含:

  • 镜头型号或系列名称
  • 当前固件版本号
  • 镜头序列号 / 设备 ID
  • 支持的协议版本

判断成功的标准:输出的型号与实际镜头上刻的型号一致,固件版本与官方工具显示一致。如果这里读不到,说明 USB 枚举成功但应用层协议没对上,需要检查项目是否支持你的镜头系列。

常见失败原因:镜头未开机、USB 线不支持数据传输(只有充电线)、镜头系列太老或太新,不在项目兼容列表里。

5.2 测试二:读取当前自定义设置

测试目的是确认读取链路能拿到镜头的自定义参数。

python tamron.py get-config

预期输出应当包含:

  • 对焦环旋转方向(顺滑 / 有级、正向 / 反向)
  • 对焦限位设置
  • 自定义按钮功能映射(A-B 对焦、预设焦点等)
  • 当前对焦模式

判断成功的标准:输出内容能与官方 Lens Utility 的界面截图对得上。如果读取失败,多半是镜头当前的模式不是“自定义模式”,需要先把镜头切换到允许 USB 自定义的模式。

5.3 测试三:修改对焦环方向与按键功能

这是官方工具最常用的功能。测试目的是验证写入链路。

# 命令格式按实际项目调整
python tamron.py set-config --focus-ring-direction reverse --button-function preset

执行前先拍照记录当前设置,防止写错参数后无法恢复。写入成功后再次执行 get-config 检查是否生效。

判断成功的标准: get-config 输出与刚才写入的参数一致,并且半按快门试拍时对焦环行为符合预期。如果写入成功但实际手感没变,可能是镜头端需要断电重连一次刷新配置。

风险提示:修改连接设置后,镜头当前的对焦行为会发生改变,现场拍摄前务必先做一次试拍。不要在一次会话里连续写入几十次参数,给镜头一个稳定完成的缓冲时间。

5.4 测试四:固件更新流程

固件更新是这个项目里风险最高的功能,必须单独测。

第一步,从腾龙官方渠道下载对应型号的固件文件,确认文件名、版本号和镜头型号完全匹配。不要把其他型号的固件强行刷入。

# 查看当前固件版本
python tamron.py info

第二步,确认电量。如果镜头通过相机供电,确保相机电池满电,最好再插上假电池或外接电源。固件写入过程断电,是镜头变砖的头号原因。

第三步,执行更新:

python tamron.py flash-firmware --file ./firmware/path/to/firmware.bin

预期输出会包含“正在擦除 Flash”“正在写入固件”“校验完成”这类进度信息。写入过程中不要断开 USB,不要切换电源,不要运行休眠命令。

判断成功的标准:固件写入完成后, info 显示的新版本号与固件文件版本一致,且镜头自动重启后能正常对焦。如果写入中途报错,先不要断电,保持连接状态查看错误信息;若工具没有自动恢复机制,再尝试重新执行一次 flash 命令。

补充一点:部分镜头固件更新后自定义设置会被重置,这是正常现象。更新完重新执行一遍 set-config 即可。

6. 接口 API、脚本与批量任务

这个项目如果只是单条命令一条条跑,体验一般;真正有价值的是把它封装成脚本,实现镜头管理的批处理和自动化。

6.1 CLI 脚本化封装

先确认项目是否提供 --json 输出选项。如果支持,可以很方便地在 Shell 里做自动化判断:

# 获取镜头信息并交给 jq 解析
python tamron.py info --json | jq '.firmware_version'

如果没有 JSON 输出,也可以直接用 grep / awk 解析文本,但不够稳定。更稳妥的做法是用 Python 的 subprocess 包一层,做一个简单的镜头检查函数。

6.2 批量管理多支镜头的示例脚本

假设你手头有 5 支镜头需要批量检查固件版本,可以写一个循环:

#!/usr/bin/env bash
set -euo pipefail

LENS_IDS=("A" "B" "C" "D" "E")
LOG_FILE="lens_check_$(date +%Y%m%d_%H%M%S).log"

for lens in "${LENS_IDS[@]}"; do
  echo "=== ${lens} ===" | tee -a "$LOG_FILE"
  # 按实际项目参数替换这行
  python tamron.py info --lens-id "$lens" >> "$LOG_FILE" 2>&1 || {
    echo "检查 ${lens} 失败,跳过" | tee -a "$LOG_FILE"
    continue
  }
done

echo "批次完成,日志: $LOG_FILE"

注意:如果项目只支持单支镜头连接,这个脚本适用于“插一支、跑一次、拔掉、换下一支”的人肉流水线;如果项目支持多设备并发,可以再改成并行任务。

6.3 封装成本地 HTTP API

如果项目本身没有 API,但你想把镜头管理能力接入自己的工具链,可以写一个轻量 FastAPI 服务做封装。下面是一个通用模板,实际接口路径需要替换为项目真实命令:

import subprocess
import tempfile
from fastapi import FastAPI, HTTPException

app = FastAPI()

# 实际项目命令,按 README 调整
TOOL_CMD = ["venv/bin/python", "tamron.py"]


def run_tool(args, timeout=120):
    return subprocess.run(
        [*TOOL_CMD, *args],
        capture_output=True,
        text=True,
        timeout=timeout,
    )


@app.get("/api/lens/info")
def lens_info():
    result = run_tool(["info"])
    if result.returncode != 0:
        raise HTTPException(status_code=500, detail=result.stderr)
    return {"stdout": result.stdout}


@app.post("/api/lens/set-config")
def set_config(config: dict):
    result = run_tool([
        "set-config",
        "--focus-ring-direction", config.get("focus_ring_direction", "default"),
    ])
    if result.returncode != 0:
        raise HTTPException(status_code=500, detail=result.stderr)
    return {"ok": True, "output": result.stdout}

启动后可以请求接口验证:

curl http://127.0.0.1:8000/api/lens/info

把工具封装成 API 后,就可以在电脑端写一个简单的状态映射页面,或接入摄影器材管理系统。但要注意,HTTP 服务只能监听本机,不要直接暴露到公网,USB 设备操作接口被外部访问有安全风险。

6.4 失败重试建议

镜头通信偶尔会因为 USB 休眠、线材接触不良而失败。批量任务必须做三件事:记录日志、区分失败原因、失败重试。建议把“未找到设备”这种硬错误直接置为失败,不要再重试三次浪费时间;“写入超时”这种软错误可以重试两到三次。重试间隔建议 3 秒以上,给 USB 设备重新枚举的时间。

7. 资源占用与性能观察

这类 USB 上位机工具的资源占用非常低,基本不需要担心。从技术原理看,它只是周期性向 USB 设备发送控制请求,CPU 占用率在空闲时基本为 0%,读取参数时也只在命令执行的几百毫秒内有波动。

可以这样观察:

# 用 time 统计单条命令耗时
time python tamron.py info

# 用 top 观察空闲时的 CPU 与内存占用
top -p $(pgrep -f tamron.py)

真正的性能瓶颈不在电脑,而在固件写入过程。镜头内置 Flash 的擦写速度通常比较慢,写入一个几十 KB 到几百 KB 的固件文件,可能持续几分钟。这段时间占用 CPU 很低,但 USB 通信必须是稳定的流式传输,不能中断。

降低风险的建议:

  • 关闭电脑自动休眠和屏幕自动锁定。
  • 使用短而粗的数据线,避免过长线缆带来的电压衰减。
  • 不要插在 USB Hub 上,直接插主板 USB 口。
  • 写入时关闭笔记本合盖休眠策略。

如果使用虚拟机跑这个工具,需要把 USB 设备直通给虚拟机,并设置虚拟机不进入挂起状态。相比之下,原生 Linux 系统更省心。

8. 常见问题与排查方法

问题现象 可能原因 排查方式 解决方案
运行命令提示 Permission denied 当前用户没有 USB 设备访问权限 lsusb 查看设备节点权限; id 检查用户组 将用户加入 plugdev 组,配置 udev 规则后重新插拔
工具提示 No device found 镜头未开机、USB 线只支持充电、兼容列表不含该镜头 检查镜头指示灯;换数据线;查看项目 README 兼容表 使用相机机身连接并开机;更换支持数据传输的 USB 线
读取到型号但固件版本为空 应用层协议不兼容 查看项目 issue 中是否有人反馈同型号 等待项目更新,或换用官方工具在 Windows 上读取
写入设置后手感无变化 镜头未识别到写入事件、参数名错误 get-config 确认写入值;重新插拔镜头 断电重连一次;以项目文档中的参数名为准
固件更新中途报 write fail USB 信号不稳定、镜头供电不足 查看 dmesg 中 USB 错误信息 更换数据线、接入原生机身、装回满电电池后重新开始
升级后镜头无法自动重启 固件写入不完整或兼容问题 观察镜头状态灯,等待 30 秒 保持连接,重新执行 flash 命令;若仍失败,立即停止并联系项目维护者
启动时提示 Address already in use 端口被占用或 Web 服务上一次未退出 `ss -tlnp grep <端口>`
日志显示 libusb: error libusb 版本问题或权限问题 python -c "import usb; print(usb.__version__)" 重装 libusb / pyusb,确认版本匹配
批量脚本跑到一半卡住 镜头断连、USB 设备被系统休眠 查看 dmesg ,确认设备是否重新枚举 脚本中增加超时与重试逻辑;临时禁用休眠

9. 最佳实践与使用建议

先备份再改动。对镜头执行任何 set-config flash-firmware 之前,把当前设置完整读取出来并保存到文件。你永远不知道参数写坏之后怎么恢复,提前保存就是给自己留退路。

python tamron.py get-config --json > lens_config_backup_$(date +%Y%m%d).json

固件文件和脚本分离。项目代码、固件文件、输入输出素材分开目录保存,固件文件按“型号+版本号”命名,不要用 firmware.bin 这种无法追溯的名字。日常运行建议使用虚拟环境,不污染系统 Python。

第一次尝试先拿备用镜头。不要直接在你的主力镜头上做固件升级测试。先读信息、读配置、改一项最基础的参数,确认整条链路稳定了,再做固件写入这种不可逆操作。

不要用 sudo 随意运行。sudo 能绕过权限问题,但也会让程序在 root 环境下读写 USB,一旦写错参数,排查权限问题的路径直接少了一半。正确做法是配置好 udev 规则,用普通用户运行。

接口服务限制本地访问。如果你参考上面的 FastAPI 模板封装了 HTTP 服务,让它监听 127.0.0.1 ,不要监听 0.0.0.0 。USB 设备操作接口被局域网其他人调用,可能造成镜头参数被篡改。

批量任务务必做好日志。脚本中每一次操作都要记录时间、设备 ID、命令、返回结果。遇到失败时,日志是唯一能帮你定位问题的依据。

尊重固件版权和来源。开源工具只负责通信,固件文件必须来自腾龙官方渠道。不要从不可信网站下载固件,不要传播或二次分发固件文件。涉及翻新、改装、超越官方支持范围的刷写行为,风险和责任都要自己承担。

发布或商用前做效果复核。无论是自己调完设置去拍摄,还是给租赁器材做批量维护,最后都要实际拍一张照片验证对焦和防抖行为正常,不要只信命令行输出。

10. 总结与下一步

这个项目最值得尝试的点,是把“镜头管理”这件原本被 Windows 绑定的事真正解放到了 Linux 上。虽然现阶段它大概率还比不上官方工具的完整度,但光是“不用虚拟机就能读镜头固件版本”这一点,已经能解决很多 Linux 摄影用户的刚需。

建议你拿到项目后先验证三件事: info 能不能正确读取型号和固件版本, get-config 能不能读出自定义设置,以及 set-config 能否把一项设置写进去并生效。这三步跑通,说明工具在你这套硬件上是可用的。固件更新功能放到最后再测,先确认基础链路稳定。

最容易踩的坑有三个:USB 权限没配好导致 Permission denied 、数据线只有充电功能导致识别不到设备、固件更新时电脑进入休眠导致写入失败。这三个问题占了新手反馈的大部分。

后续可以继续扩展的方向也不少:给工具包一层 Web 界面、把多镜头批量调参做成可视化任务、在脚本里接入镜头序列号台账、甚至为常见镜头的自定义预设做配置文件模板。如果你手里有多个系列的腾龙镜头,建议先做一个小工具,把每支镜头的“当前配置”统一归档,后续维护会轻松很多。

新学期领福利!购实物周边送年卡会员! T恤、键盘、双肩包等周边任选!还能解锁资源下载、VIP文章等多重会员权益! 阅读详情

相关推荐

高校科研成果转化难怎么办?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新产业创新智能化发展。

探秘Codeforces EduHacking:一款代码竞赛辅助工具

探秘Codeforces EduHacking:一款代码竞赛辅助工具 CodeforcesEduHacking???? Codeforces Edu & Div. 3 Open hacking项目地址:https://gitcode.com/gh_mirrors/co/CodeforcesEduHacking 项目简介 是一个面向编程学习者和爱好者的开源项目,由开发者im0qianqian创建。它的主...

gitblog_00077的博客 675

科技服务机构如何提供专业、高效的评估评价服务,提升市场竞争力?.docx

科技服务机构如何提供专业、高效的评估评价服务,提升市场竞争力?

[YTU]_2906( 多重继承 日期时间)

题目描述 在空缺的地方补全代码,只需提交补全部分即可 请用C++方式提交 #include <iostream> using namespace std; class Time { public: void set_time(); void show_time(); private: int hour; int mi...

weixin_30586085的博客 203

多继承

总时间限制: 5000ms 内存限制: 5535kB 描述 1、定义日期“Date”类,类中包含数据成员年、月、日,成员函数包括构造函数(只有带参的构造函数),设置日期,或取年、月、日,显示年、月、日等 2、定义时间“Time”类,数据成员包括时分秒。成员函数的要求同date类 3、定义日期时间型“Date_Time”类 ⑴公有继承Date类及Time类; ⑵不增加数据成员; ⑶增加日期时间处理成员函数,包括初始化日期时间、设置日期时间、显示日期时间等。在 4、每个类都要求重载>> 和<&

qq_45955682的博客 488

OJ第四批——Problem A: 多重继承 日期时间

问题及代码: Problem A: 多重继承 日期时间 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 203  Solved: 159 [Submit][Status][Web Board] Description 在空缺的地方补全代码,只需提交补全部分即可 请用C++方式提交 #include using n

Timor7hao的专栏 649

“师创杯”精英赛G---限额逃生2(BFS)---已AC+错误分析

Problem G: G-险恶逃生II Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 27  Solved: 5 [Submit][Status][Web Board] Description     SOS!!!koha is trapped in the dangerous maze.He need your help a

不会吃鱼的喵 706

YTU 2906: 多重继承 日期时间

2906: 多重继承 日期时间 时间限制: 1 Sec  内存限制: 128 MB 提交: 240  解决: 190 题目描述 在空缺的地方补全代码,只需提交补全部分即可 请用C++方式提交 #include using namespace std; class Time { public:     void set_time();     void show_

小坏蛋_千千 696

Date_Time(多继承)

描述 1、定义日期“Date”类,类中包含数据成员年、月、日,成员函数包括构造函数(只有带参的构造函数),设置日期,或取年、月、日,显示年、月、日等 2、定义时间“Time”类,数据成员包括时分秒。成员函数的要求同date类 3、定义日期时间型“Date_Time”类 ⑴公有继承Date类及Time类; ⑵不增加数据成员; ⑶增加日期时间处理成员函数,包括初始化日期时间、设置日期时间、显示日期时间等。在 4、每个类都要求重载>> 和<<运算符< span=...

C_Dreamy的博客 2013

Front / Back Blend Curve 可交互可视化

公式: backBlendWeight = 0.5 - 0.5 * cos(pi * saturate((abs(angle) - (90 - H)) / (2H)))

node-v24.21.0-x64.msi

Node.js是一个开源且跨平台的JavaScript运行环境,它允许开发者使用JavaScript编写服务器端的脚本和应用。Node.js的主要特点包括事件驱动、非阻塞I/O模型,使其成为处理大量并发连接的理想选择。它非常适合构建数据密集型实时应用,这类应用需要处理许多并行操作,比如社交媒体、实时聊天等。

地方科技管理部门如何突破传统评估方法局限,实现科技项目精准资助?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新产业创新智能化发展。

Go 1.27.1 安装包 Windows x64(阿里云镜像官方同步)+ 多版本共存镜像加速配置教程

Go 语言 1.27.1 官方发行版(阿里云镜像同步原包),含多版本共存国内镜像加速配置教程:解压即用、GOROOT/GOPATH 环境变量、goproxy.cn 加速必配、go install 多版本管理。实测:解压后 go version 输出 1.27.1、go mod tidy 加速拉取依赖成功。使用方法:解压到纯英文目录,按教程第二节配置环境变量后重开终端验证。

IOS微信插件 WCEhance-2.0-6

资源来源于网络 仅供测试使用请在24小时内删除

国央企如何强化内部创新体系并推动技术成果的外部转化?.docx

国央企如何强化内部创新体系并推动技术成果的外部转化?

上一篇: Windows下MySQL与Navicat安装配置及建库建表全攻略
下一篇: Android图片加载框架设计与冷启动优化:从LRU到线程池的完整实战
weixin_30411819
博客等级 码龄11年 137粉丝 1392原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值