【发布时间】:2019-12-27 19:59:19
【问题描述】:
我有一个自定义的智能指针模板类SP<T>,如下所示(简化):
template<class T> class SP
{
public:
T* operator->() const { return obj; }
operator T*() const { return obj; }
// other small methods (constructors, getters, setters)
private:
T* obj;
};
为了简化 Xcode 和 Android Studio 中的调试,我想为 SP<T> 类型编写一个自定义 LLDB 格式化程序 条目,它的行为应该与基础类型 T* 完全相同。
目前,我能做到的最好的是以下简单的摘要提供程序:
type summary add -w alf -s "${var.obj}" -x ^SP<.*>$
这已经是一个巨大的胜利,因为现在显示了所有类型对象的摘要。但是有两个限制:
- 如果是
obj==nullptr,则摘要完全错误,因为在取消引用之前没有检查指针有效性。 - 对于支持语法子代的
T类型,例如数组,我希望SP<T>也有语法子代(但前提是obj!=nullptr)。
我知道用 Python 语言编写的摘要提供程序函数和语法子类。我忽略的是如何将摘要或语法子提供者转发到另一个具有可变基础类型的提供者。
【问题讨论】: