【发布时间】:2015-11-05 11:21:38
【问题描述】:
我有一个接收多种类型的模板类,接收到的每种类型都是两个选项之一的子类。 我想根据标识它们中的每一个的父类来不同地扩展它们。这相当于对可变参数模板参数实现“过滤”。
例如:
class A{};
class B{};
template<class... C>
struct F{
std::tuple<types_derived_by<A, C>...> fn(types_subclassing<B, C>...){}
};
types_derived_by 模板函数应该生成一个可变参数模板包,其中包含 C 中从 A 或 B 派生的所有类型。
例如:
struct DA : public A{};
struct DB : public B{};
int main(){
F<DA, DB> f;
//f has a member function: DA fn(DB);
}
我正在使用 C++11,但如果需要,我可以迁移到 C++14。
【问题讨论】:
-
您希望返回类型扩展到什么?你不能像那样返回多种类型。也许你想要
std::tuple? -
是的。元组。我打错了
-
也许,您必须在派生类中声明一些
typedef ... NearestBase;才能遍历超类?
标签: c++ templates c++11 variadic-templates