当前位置: 首页 > 知识库问答 >
问题:

模板基类初始化

傅朝
2023-03-14

如何初始化模板基类的成员?

template<class base>
struct child: base
{
    child(float a, float b):
        child::a(a), // doesnt work
        base::b(b) // doesnt work
    {}
};


struct base
{
    int a;
    int b;
};

using example = child<base>;

显然,base{a,b}可以工作。 但那不是我想做的。

共有1个答案

齐高阳
2023-03-14

这段代码足以修复您所显示的内容,但仍然不清楚您实际上想要做什么。 代码仍然不是很好,但是它在您给出的指令下工作,即base不能被触及。 我去掉了模板的东西,因为它是可能的(也许不实际)得到一些没有模板的编译的东西。 当知道什么需要通用时,它可以很容易地被修复为与模板一起工作。

struct Base {
  int a;
  int b;
};

struct Child : public Base {
  Child(float a, float b) : Base{static_cast<int>(a), static_cast<int>(b)} {}  // Data loss
};

int main() { Child child(3.14f, 9.81f); }

这里有一个子模板类,我不能假定它是正确的。 但是同样的指令是base不能被触及。

struct Base {
  int a;
  int b;
};

// Will fail spectacularly for any type that can't be converted to int
// Could be remedied with some SFINAE, but I only know enough about that
// to know it's an option. It's also quite likely not what's desired anyway
template <typename T>
struct Child : public Base {
  Child(T a, T b) : Base{static_cast<int>(a), static_cast<int>(b)} {}
};

int main() { Child<float> child(3.14f, 9.81f); }

如果base中的类型是泛型,那么您完全不需要继承。

template <typename T>
struct Base {
  T a;
  T b;
};

int main() { Base<float> base{3.14f, 9.81f}; }
 类似资料:
  • 我有一个模板基类,其模板参数类型为bool。此基类的构造函数参数列表取决于模板参数是true还是false。我想从这个类派生另一个模板类,它的模板参数是任意类型的。我需要这个派生类根据该类型的特征调用该基类的正确构造函数。 下面的例子并不包罗万象。无论是否为整数,基类模板bool可以是任何类型trait。此外,传递给派生类的模板参数的类型可以是任何类型。

  • 我认为模板函数可以有默认的参数参数(不是模板参数而是运行时参数)。我们也可以用空括号初始化来初始化一个类。但是编译器如何匹配模板呢? 这段代码为什么要编译,编译器如何进行演绎,以及这个函数调用示例中的参数是什么? 我所理解的是:默认括号初始化调用空构造函数,这是隐式创建的,因为没有用户定义的构造函数或用户定义的默认构造函数。也就是说,我们可以用{}初始化任何包。所以扣除不适用于那里,因为我们不能选

  • 问题内容: 在Python中,请考虑以下代码: 如何在子类中初始化?我正在关注Python教程,但没有涵盖。当我在Google上搜索时,发现了不止一种方法。处理此问题的标准方法是什么? 问题答案: Python(直到第3版)支持“旧式”和新式类。新样式类派生自您使用的类,并通过调用它们的基类,例如 因为python了解旧样式和新样式的类,所以有不同的方法可以调用基本方法,这就是为什么您找到了多种方

  • 我试图为我的模板创建一个覆盖,以自定义扩展在文章中显示其字段的方式。 我使用的扩展是DPfields,我使用的是开发人员提供的参考指南:https://joomla.digital-peak.com/documentation/162-dpfields/2750-rendering-fields 特别是我提到的段落:访问布局中的字段 我已经创建了一个新的php文件从default.php文件开始的

  • 我有一个模板参数为T的类template Templ,Templ类有一个类型为T的数据成员,称为obj。我编写了一个可变构造函数模板,将参数转发给obj的构造函数: 现在我意识到类型T可能是一个具有init list构造函数的类,我希望它可以通过temp访问。所以我检查了什么是std::list::emplace和make\u shared。它们有一个像我一样的可变函数,但它们没有采用初始化列表的

  • 以下XSLT在Stylus Studio上无缝地将输入转换为输出: 为此,我必须在Stylus Studio的场景属性/处理器部分指定要使用的初始模板值。XSLT将用于java应用程序[使用Saxon HE 9.5.1-2库的iWay Service Manager],我无法找出指定初始模板的方法。也许我可以利用一个JVM选项,但我正在Internet上查找,还没有点击。 与此同时,我试图解决将用

  • 我正在练习在链表类的实现中使用节点结构实现一个模板类链表。在createNode()成员函数中,当我初始化指向节点结构的指针变量时,会出现编译器错误:“未初始化的局部变量'newNode'已使用” 如果我将初始化更改为: 它工作得很好。如果我可以初始化基本数据类型,比如int,我有点困惑为什么这很重要: 为什么我不能对structs做同样的操作??我的代码如下:

  • 我找不到任何关于这个具体案例的具体SO帖子,所以我想问一下我认为是/否的问题。 以下是JLS§12.4.2(Java SE 8),清单6-7: 我的问题是:这是否意味着子类的final static变量在超类的静态初始化之前初始化(假设final static作为其声明的一部分初始化)?