gpt4 book ai didi

c++ - 访问基类中的子模板参数(在子类上模板化)

转载 作者:行者123 更新时间:2023-11-30 04:24:46 24 4
gpt4 key购买 nike

我有一个子类 (Child),它继承了以子类为模板的基类 (Base)。子类也是一个类型的模板(可以是整数或其他......),我试图在基类中访问这种类型,我尝试了很多东西但没有成功......这就是我的想法可能更接近于一个可行的解决方案,但它不能编译......

template<typename ChildClass>
class Base
{
public:
typedef typename ChildClass::OtherType Type;

protected:
Type test;
};

template<typename TmplOtherType>
class Child
: public Base<Child<TmplOtherType> >
{
public:
typedef TmplOtherType OtherType;
};

int main()
{
Child<int> ci;
}

这是 gcc 告诉我的:

test.cpp: In instantiation of ‘Base >’: test.cpp:14:7:
instantiated from ‘Child’ test.cpp:23:16: instantiated from here test.cpp:7:48: error: no type named ‘OtherType’ in ‘class Child’

这是一个等效的工作解决方案:

template<typename ChildClass, typename ChildType>
class Base
{
public:
typedef ChildType Type;

protected:
Type test;
};

template<typename TmplOtherType>
class Child
: public Base<Child<TmplOtherType>, TmplOtherType>
{
public:
};

但困扰我的是重复的模板参数(将 TmplOtherType 作为 Childtype 转发)到基类......

大家怎么看?

最佳答案

你可以使用 template template parameter避免重复的模板参数:

template<template<typename>class ChildTemplate, //notice the difference here
typename ChildType>
class Base
{
typedef ChildTemplate<ChildType> ChildClass; //instantiate the template
public:
typedef ChildType Type;

protected:
Type test;
};

template<typename TmplOtherType>
class Child
: public Base<Child, TmplOtherType> //notice the difference here also
{
public:
};

关于c++ - 访问基类中的子模板参数(在子类上模板化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12491433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com