我有一个包含variant
.
我想为该结构编写一个成员函数,该函数应该根据当前持有的类型变体运行代码。
但是,我在编译时遇到了问题。我不想使用更多的“模板恶作剧”,比如使用单独的结构来定义operator(T&)
,因为它更加污染了语法。这是一个例子:
struct Data {
std::variant<int, double> var;
//Into this function,multiple lambdas should be passed for cases that the user wants to handle
template<typename ... Funcs>
void apply(Funcs&&... funcs) {
std::visit(std::forward<Funcs>(funcs)...,var);
}
};
int main() {
Data d;
d.var = 4;
//variant holds int and lambda provided that takes int&, execute it:
d.apply([](int& i){
std::cout << "I am Int Poggers" << std::endl;
});
d.var = 0.0;
//variant holds double but no lambda passed that takes a double, hence nothing happens:
d.apply([](int& i){
std::cout << "I am Int Poggers" << std::endl;
});
}
我什至不知道编译器想从我这里得到什么: https ://godbolt.org/z/oM4584anf