我遇到了以下挑战。
我有一个模板类,它将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){
...
}
};
祝福和新年快乐!
答案 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;