在另一个类中使用模板类的typedef

时间:2014-01-08 13:09:19

标签: c++ templates

我遇到了以下挑战。

我有一个模板类,它将boost shared_ptr定义为一种类型。

template<typename T, int a, int b>
class AbstractSmth{

public:

typedef boost::shared_ptr< AbstractSmth > ABSTR_SMTH;

...
};

和另一个模板类,我想在其中使用该类型。我知道以下语法有效。

template<typename T, int a, int b>
class AbstractOtherThing{

public:

    typename AbstractSmth<T,a,b>::ABSTR_SMTH p_smth;

    void myFancyFunction(typename AbstractSmoother<T,a, b>::ABSTR_SMTH baz){
    ...
}

};

是否可以将该类型用作该类中的typedef?也许是这样的:

template<typename T, int a, int b>
class AbstractOtherThing{

public:

    using typename AbstractSmth<T,a,b>::ABSTR_SMTH;

    ABSTR_SMTH p_smth;

    void myFancyFunction(ABSTR_SMTH baz){
    ...
}

};

祝福和新年快乐!

2 个答案:

答案 0 :(得分:7)

不确定。

旧校园:

typedef typename AbstractSmth<T,a,b>::ABSTR_SMTH ABSTR_SMTH;

C ++ 11:

using ABSTR_SMTH = typename AbstractSmth<T,a,b>::ABSTR_SMTH;

答案 1 :(得分:1)

你想:

typedef typename AbstractSmth<T,a,b>::ABSTR_SMTH ABSTR_SMTH;

或C ++ 11方式:

using ABSTR_SMTH = typename AbstractSmth<T,a,b>::ABSTR_SMTH;