【发布时间】:2011-12-13 19:19:08
【问题描述】:
这个问题的灵感来自于 following solution 中的多重继承重载伪歧义,这是实现 this answer 中提出的 boost::variant 的 lambda 访问者的好方法:
我想做如下的事情:
template <typename ReturnType, typename... Lambdas>
struct lambda_visitor : public boost::static_visitor<ReturnType>, public Lambdas... {
using Lambdas...::operator(); //<--- doesn't seem to work
lambda_visitor(Lambdas... lambdas) : boost::static_visitor<ReturnType>() , Lambdas(lambdas)... { }
};
我不确定为压缩类型列表添加 using 子句的正确语法是什么。 using 子句对于阻止编译器抱怨 operator() 模棱两可至关重要,而这完全不是,因为它们具有所有不同的签名。
【问题讨论】:
-
有一个P0195R2“使用声明中的包扩展”提案。
-
using声明上下文中的参数包扩展符合 C++17 标准。
标签: c++ operator-overloading c++11 multiple-inheritance variadic-templates