我的情况就像这个人为的例子:
template<class TFeature> struct Controller {};
template<class TController,typename T> struct Feature {
typedef Feature<TController,T> FeatureType;
};
typedef Controller<Feature::FeatureType,int> DefaultController;
Controller模板化接受功能,我的问题是某些功能需要控制器的类型作为模板参数。这使得样本最后一行的typedef无法编译。
这是可能的,还是需要重新考虑设计?
答案 0 :(得分:2)
为了实现这一点,你应该做一些元编程魔术(相信我这不是一件容易的事)。但是,如果你真的知道它并使用boost
是一个选项,你可以看看boost::mpl
,你可以这样:
template< class ControlerT >
struct FeatureEx {
typedef ControlerT controler_type;
};
template< class FeatureT >
struct ControlerEx {
typedef ControlerEx<FeatureT> this_type;
typedef typename boost::mpl::apply<
FeatureT, boost::mpl::identity<this_type>
>::type feature_type;
feature_type const& get_feature() const {return f_;}
private:
feature_type f_;
};
typedef ControlerEx<FeatureEx<boost::mpl::placeholders::_1> > DefaultControler;
答案 1 :(得分:1)
您正在传递Controller
类两个模板参数,但您已声明它只采用一个。你需要以下的东西吗?
typedef Controller<Feature<Controller<int>,int>::FeatureType> DefaultController;
答案 2 :(得分:0)
一种选择是使用虚拟子类而不是typedef:
struct DefaultController : public Controller<Feature<DefaultController,int>::FeatureType> {};
答案 3 :(得分:0)
似乎你试图将2个参数传递给你的控制器模板,而它只能接受一个。