【发布时间】:2017-05-13 01:49:49
【问题描述】:
我想将Derived 类作为模板参数Base<T> 类传递。
当我的Derived 类是一个模板并且它很长时,我的代码有轻微的可维护性和可读性问题,例如
template<class Derived>class Base{ //library : don't modify me
};
template<template<class>class T1,class T2,class T3>class Derived : //user class
public Base<Derived<T1,T2,T3>>{
};
在某些情况下,Derived 有很多模板,我必须重新输入/复制粘贴几次:-
template<template<class>class T1,class T2,class T3>class HyperDatabase : //user class
public IndexManager<HyperDatabase<T1,T2,T3>>,
public AwesomeHash<HyperDatabase<T1,T2,T3>,BitShifter>,
public Allocator<AlloDefault,HyperDatabase<T1,T2,T3>> { // etc...
};
问题
有没有办法让它更简洁?
我的梦想是:-
template<template<class>class T1,class T2,class T3>class Derived : //user class
public Base<Derived>{
};
或
template<template<class>class T1,class T2,class T3>class Derived : //user class
public Base<MEEEEEEE>{
};
我的糟糕解决方案
使用宏
#define MEEEEEEE Derived<T1,T2,T3>。-
双重继承:太尴尬了:-
template<class T>class Base2: public Base<T>{};//user class template<template<class>class T1,class T2,class T3>class Derived : //user class public Base2<Derived<T1,T2,T3>>{ };
【问题讨论】:
标签: c++ templates c++14 crtp maintainability