我正在使用带有 C/C++ 扩展的 VS Code for C++(
vscode-cpptools
),发现它不会对依赖于外部模板的模板参数的模板内模板中的某些内容提供建议。
这是一个例子:
template <typename T>
class B
{
public:
void do_st()
{
std::cout << "do_st" << std::endl;
};
};
template <typename T>
class A
{
public:
std::shared_ptr<B<T>> return_ptr()
{
return std::make_shared<B<T>>();
}
void do_ss()
{
return_ptr()->do_st();
// ^before I type "do_st()" here, "do_st" is not one of
// the suggestions, but I expected that it would be.
}
};
为什么当我打字时
return_ptr()->
智能感知没有建议
do_st()
?
有什么办法可以实现这一点吗?还是intellisense不支持这个?
尽管在您展示的场景中,我认为静态分析应该能够解决这个问题,但它并不总是那么简单(C++ 是一种非常粗糙的语言,随着新的语言标准的增加,它的复杂性也随之增加)。
vscode-cpptools github 页面上有相关(尚未解决)的问题:
与您的情况类似。
IntelliSense 对于模板类的智能指针失败#9429
与您的场景非常非常相似,并标记为以下内容的重复项:
添加 UI 为模板提供参数,以启用模板 IntelliSense #1946
此功能请求是 Visual Studio 现有功能的镜像功能,在提供特定模板参数时,您可以在其中看到智能感知和模板问题。引用该问题票证讨论线程中的一位维护者的评论:
事实证明,这是一个“设计使然”的限制——模板已关闭错误,因为模板参数不知道类型信息。我们必须添加一些 UI,使用户能够设置模板参数的实际类型。
您可以通过点赞反应来提高这些问题票证的优先级,并订阅它们以获取有关任何更新的通知。