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

What types are convertible to std::any?

本文关键字:std 转换 any 类型      更新时间:2023-10-16

在编写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!
}

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

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

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


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