我做一些模板元編程,我有這樣的情況,首先我有幾類,如: -幾個級別的嵌套模板。我如何得到這個工作?
template <typename Q>
struct Object {
public:
Q data;
};
template <typename P>
class CircleObject : public Object<const typename P::Circle> {
};
template <typename P>
class SquareObject : public Object<const typename P::Circle> {
};
template <typename P>
class Storage {
public:
typedef CircleObject<P> MyCircle;
typedef SquareObject<P> MySquare;
};
現在,我正在試圖確定這些物體本身的一些特點: -
template <typename P>
struct CircleTraits<Storage<P> > {
template <typename otype>
struct IsCircle {
static const bool VALUE = false;
};
};
template <typename P>
struct CircleTraits<Storage<P> >::IsCircle<Storage<P>::MyCirlce> {
static const bool VALUE = true;
};
但是,這是不正確的(編譯錯誤)。我嘗試了一種將類型名稱和模板參數放在每個地方的試驗和錯誤方法,但沒有對模板特化的深入理解,我沒有真正能夠解決這個問題。有人可以幫忙嗎?
什麼我希望在以後的功能實現是一樣的東西: -
typedef Storage<RedObjects> RedStorage;
template <typename SpecializedStorage>
class Processor {
typedef CircleTraits<typename SpecializedStorage> MyCircleTraits;
template <typename ObjectType>
void foo(ObjectType& data);
};
template <typename SpecializedStorage>
template <typename ObjectType>
void foo(ObjectType& data) {
if (MyCircleTraits::template IsCircle<ObjectType>::VALUE) {
// do something about the damn circles
}
}
我不清楚你要做什麼。 – Danvil
您的意思是'template struct Object'? –
sehe
@sehe是的,這是一個錯字。修復。 – owagh