我有一个接收多个类型的模板类,每个接收到的类型都是两个选项之一的子类。我想根据标识每个选项的父类来不同地扩展它们。这相当于在可变模板参数上实现“filter”。
举例来说,您可以:
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);
}
型
我使用C11,但如果需要,我可以转到C14。
2条答案
按热度按时间uxhixvfz1#
你可以这样做:
字符串
或者使用
std::tuple_cat
型
然后再进行以下操作:
型
Demo/Demo with
std::tuple_cat
系列chhqkbe12#
如果你不介意使用元组作为返回值和参数,这可能是一个适合你的解决方案:
字符串