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

Pet*_*ter 0 c++ llvm c++17

在编写 clang 插件时,我注意到类型的对象llvm::cl::opt<T>不可转换为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!
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么在这个特定实例中这是不可能的,以及类型必须满足什么标准才能转换为std::any.

Nat*_*ica 5

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

std::any 要求在构造和赋值中类型是可复制的。


您可以使用 astd::unique_ptr<llvm::cl::opt<std::string>>std::shared_ptr<llvm::cl::opt<std::string>>什至 a ,std::reference_wrapper具体取决于您希望如何处理对象的生命周期。