在编写 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.
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具体取决于您希望如何处理对象的生命周期。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |