C++ 驱动类和模板参数
很抱歉标题含糊不清 我试图修复一个相当大的代码库中的问题。该修复程序要求我将C++ 驱动类和模板参数,c++,templates,inheritance,C++,Templates,Inheritance,很抱歉标题含糊不清 我试图修复一个相当大的代码库中的问题。该修复程序要求我将ChildClass和childlistlementclass作为模板参数与另一个一起提供。我相信我遇到的问题是parentlistlementclass中的myType没有被typedef ChildClass myType覆盖。 我怎样才能做到这一点?多谢各位 编译器说: Error 1 error C2664: 'void ParentListElementClass<ChildClass>::
ChildClass
和childlistlementclass
作为模板参数与另一个一起提供。我相信我遇到的问题是parentlistlementclass
中的myType
没有被typedef ChildClass myType覆盖派生类ChildListElementClass
中的code>。
我怎样才能做到这一点?多谢各位
编译器说:
Error 1 error C2664: 'void ParentListElementClass<ChildClass>::AddX(ParentClass<ParentListElementClass<ChildClass>> *)' : cannot convert argument 1 from 'ParentClass<ChildListElementClass> *const ' to 'ParentClass<ParentListElementClass<ChildClass>> *'
编辑:在itachi的帮助下工作版本:
template <typename ElementType, typename ListType> class ParentListClass;
template <typename ElementType, typename ListType>
class ParentElementClass
{
typedef ParentListClass<ElementType, ListType> myType;
};
template <typename ElementType, typename ListType>
class ParentListClass{};
class ChildListClass;
class ChildElementClass : public ParentElementClass<ChildElementClass, ChildListClass>{};
class ChildListClass : public ParentListClass<ChildElementClass, ChildListClass>{};
模板类ParentListClass;
模板
类ParentElementClass
{
typedef ParentListClass myType;
};
模板
类ParentListClass{};
类ChildListClass;
类ChildElementClass:公共ParentElementClass{};
类ChildListClass:PublicParentListClass{};
我不确定我是否完全理解您的问题,但不管我怎么想,更改ParentListentClass似乎很难避免。你可以在这方面试试
template<typename T, typename U>
struct MyTypedefCase
{
typedef T<U> _type;
};
模板
结构MyTypedefCase
{
类型定义T_类型;
};
然后将ParentListElementClass重写为
template <class ParentType, typename T, typename U>
class ParentListElementClass
{
//typedef ParentClass<ParentListElementClass> myType; Change this to below line
typedef typename MyTypedefCase<T,U>::_type myType;
//Rest of your code
};
模板
类ParentListElementClass
{
//typedef ParentClass myType;将其更改为第行下方
typedef typename MyTypedefCase::u type myType;
//代码的其余部分
};
及
class ChildListElementClass:公共ParentListElementClass
我从来没有用模板做过这么复杂的事情,所以我不保证它会工作,但是如果我必须用最小的改动来做的话,这就是方法。也许有人可以研究一下这个解决方案,并提供一些更改或改进。非常感谢。如果这一切顺利,我会同意的。我很感兴趣是否有一个改动较少的解决方案,因为我希望尽可能少地干扰原始的代码库。这种方式不太有效,因为MyTypedefCase
中的模板参数T
需要它自己的模板列表才能使typedef T\u type
起作用。不过,我稍微修改了您的代码,以便所有类都将自己作为模板参数template
,现在它确实可以工作了。再次感谢你。
int _tmain(int argc, _TCHAR* argv[])
{
ChildClass Child;
ChildListElementClass ChildListElement;
Child.DoSomething();
return 0;
}
template <typename ElementType, typename ListType> class ParentListClass;
template <typename ElementType, typename ListType>
class ParentElementClass
{
typedef ParentListClass<ElementType, ListType> myType;
};
template <typename ElementType, typename ListType>
class ParentListClass{};
class ChildListClass;
class ChildElementClass : public ParentElementClass<ChildElementClass, ChildListClass>{};
class ChildListClass : public ParentListClass<ChildElementClass, ChildListClass>{};
template<typename T, typename U>
struct MyTypedefCase
{
typedef T<U> _type;
};
template <class ParentType, typename T, typename U>
class ParentListElementClass
{
//typedef ParentClass<ParentListElementClass> myType; Change this to below line
typedef typename MyTypedefCase<T,U>::_type myType;
//Rest of your code
};
class ChildListElementClass : public ParentListElementClass<ChildClass,ChildClass,ChildListElementClass>