You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测存储boost::variant指针的向量内部的空指针

检测boost::variant存储指针是否为空的实现方案

首先需要指出你当前示例代码的误区:你代码中的A<int>* tst从未被存入std::vector<registry> v,因此你将tst置空的操作完全不会影响向量内的元素,自然不会触发你期望的错误提示。如果要测试空指针场景,需要将空指针存入variant后再放入向量,比如执行v.push_back(static_cast<A<int>*>(nullptr));。

具体的空指针检测有两种常用实现方式:

方式1:在原有业务访问器中增加空指针校验

直接修改你的myVisitor,在调用指针指向的成员函数前先判空,空指针时抛出异常或输出错误提示即可:

class myVisitor : public boost::static_visitor<>
{
public:
    template<typename T>
    void operator() (A<T>* a) const
    {
        // 新增空指针校验逻辑
        if (!a) {
            // 可自定义错误处理,比如抛出异常、输出错误日志
            throw std::runtime_error("访问到空指针类型的variant条目");
        }
        a->write();
    }
};

该方式适合在执行业务逻辑的同时完成校验,调用boost::apply_visitor时只要variant存储的是空指针就会触发你要的错误提示。

方式2:实现独立的空指针检测访问器

如果你需要单独判断某个variant条目是否为空,不需要执行业务逻辑,可以专门写一个返回布尔值的访问器:

class NullCheckVisitor : public boost::static_visitor<bool>
{
public:
    template<typename T>
    bool operator() (const T* ptr) const
    {
        return ptr == nullptr;
    }
};

使用时调用bool isNull = boost::apply_visitor(NullCheckVisitor(), x);即可,返回值为true就说明当前variant存储的是空指针。

内容的提问来源于stack exchange,提问作者user8458838

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:45:04