我在下面的代码中重新创建了我遇到的问题:
template<typename T>
class A{
using type = T::type;
type someFunction(/*some parameters*/){/*code for the function*/}
//other stuff
};
template<typename T>
class B : public A<B<T>>{
typedef T type;
//other stuff
};
问题是我需要A有一个返回类型为T::type
的函数,但由于在编译A时没有完全声明B,我得到错误{{1}当我尝试编译它时(其中int可以替换为任何其他类型)。有没有办法让这个工作?
答案 0 :(得分:3)
如果将function dmp( $value ) {
echo $value ;
}
的定义移到外部特征类,则可以实现它:
B<T>::type
答案 1 :(得分:1)
有什么方法可以让它发挥作用吗?
您可以使用traits类派生类型,而不是使用:
using type = T::type;
示例:
// Declare TypeSelector
template <typename T> struct TypeSelector;
template <typename T>
class A
{
using type = typename TypeSelector<T>::type;
type someFunction(/*some parameters*/){ return type {}; }
};
// Declare B.
template <typename T> class B;
// Define TypeSelector for <B<T>> first before defining B<T>
template <typename T> struct TypeSelector<B<T>>
{
using type = T;
};
template<typename T>
class B : public A<B<T>>{
using type = typename TypeSelector<T>::type;
//other stuff
};
int main()
{
// Compiles fine.
B<int> a;
}