我无法将头部包裹在变体上。
我读到,我可以使用std :: monostate暗示一个空状态,作为变体内的替代方案之一。但是,如何使用std :: visit促进的访问者模式?
#include <variant>
struct Visitor{
void operator()(double){};
void operator()(int){};
};
int main() {
std::variant<std::monostate, int, double> v = 1;
std::visit(Visitor{}, v);
}
不起作用,也不为std :: monostate提供呼叫操作符重载。
如果我尝试为call运算符包括一个通用引用重载,它将完全匹配所有内容,并且不再使用这两个特定的重载
答案 0 :(得分:2)
我添加了适当的访问者方法,并且它在https://wandbox.org/ c ++ 2a
上对我有效您的问题是什么?
CloudBlobClient.ListBlobs(prefix: "test").OfType<CloudBlockBlob>.Select(b=> b.Name).ToList();
答案 1 :(得分:1)
不起作用,也不为std :: monostate提供呼叫操作符重载。
std::monostate
上的其他重载确实对我有用:
struct Visitor {
void operator()(double){}
void operator()(int){}
void operator()(std::monostate){}
};
当这样使用时
std::variant<std::monostate, int, double> v = 1;
std::visit(Visitor{}, v); // invokes the int overload
v= 1.234;
std::visit(Visitor{}, v); // ... and the double overload
v = std::monostate{};
std::visit(Visitor{}, v); // ... and finally the std::monostate overload
它应该愉快地编译并产生预期的行为。