gpt4 book ai didi

c++ - 如何声明自引用模板类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:45 24 4
gpt4 key购买 nike

我的情况就像这个人为的例子:

template<class TFeature> struct Controller {};

template<class TController,typename T> struct Feature {
typedef Feature<TController,T> FeatureType;
};

typedef Controller<Feature::FeatureType,int> DefaultController;

Controller 被模板化以接受特性,我的问题是一些特性需要 Controller 的类型作为模板参数。这使得示例最后一行的 typedef 无法编译。

这是可能的还是我需要重新考虑设计?

最佳答案

为了完成这个你应该做一些元编程魔术(相信我这不是一件容易的事)。但是如果你真的需要它并且使用 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;

关于c++ - 如何声明自引用模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com