提问者:小点点

哪些类型可以转换为std::any?


在编写clang插件时,我注意到llvm::cl::opt类型的对象不能转换为std::any,即以下代码片段不能编译:

#include <any>
#include <string>

#include "llvm/Support/CommandLine.h"

int main()
{
  llvm::cl::opt<std::string> opt("o");
  std::any opt_any = opt; // doesn't work!
}

我想知道为什么在这个特定的实例中这是不可能的,以及类型通常需要满足哪些条件才能转换为std::any


共1个答案

匿名用户

llvm::cl::opt不可复制。 复制构造器和复制赋值运算符都标记为delete

std::any要求在构造和分配中该类型是可复制的。

您可以使用std::unique_ptr>std::shared_ptr>,甚至可以使用std::reference_wrapper,这取决于您希望如何处理对象的生存期。