编写可变参数概念以获得 clangd 自动完成

问题描述 投票:0回答:1

我有以下概念:

template<typename T, typename MsgType>
concept CanSend = requires(T obj)
{
  {obj.send(std::declval<MsgType>())} -> std::same_as<void>;
};

template<typename Handler, typename... MessageTypes>
concept HandlerConcept = (CanSend<Handler, MessageTypes> && ...); 

我想将其重写为等效概念

C
,以便
clangd
能够找出
C
有一个发送方法。现在,如果我写:

template<HandlerConcept<int> HandlerT>
void foo(HandlerT obj)
{
   obj.send(5);
}

我的自动完成无法弄清楚

obj
有这个
send
方法。相比之下,
clangd
is能够在以下代码片段中弄清楚,
obj
有一个方法
send()
...

template<CanSend<int> T>
void foo(T obj)
{
}
c++ c++-concepts clangd
1个回答
0
投票

Clangd 基于概念的自动完成在现阶段还非常原始。在 https://github.com/clangd/clangd/issues/261 中完成了一些初步工作,此后就没有进一步的工作,因此该补丁中处理的任何简单情况都是当前有效的。

我鼓励您就不起作用的案例(如您问题中的案例)提交clangd问题,以告知/集中该领域未来任何潜在的工作。

© www.soinside.com 2019 - 2024. All rights reserved.