gpt4 book ai didi

c++ - 父类有 26 个构造函数重载。如何在不复制粘贴 26 个重载的情况下将一个小任务附加到所有构造函数?

转载 作者:太空狗 更新时间:2023-10-29 20:33:04 26 4
gpt4 key购买 nike

我想从库中派生一个类,以利用多态性的便利功能。在这种情况下,父类是 cv::Mat来自 OpenCV 4.1

在我的子类中,我们称它为 SpecialMat,我想添加一个简单的属性,无论调用 cv::Mat 的 26 个构造函数中的哪一个,它都可以在初始化期间计算。我喜欢做的是类似下面的事情:

class SpecialMat : public cv::Mat
{
private:
float my_special_property;
void thisFunctionAlwaysCalledAfterConstructor() {
//some constant calculation we can always do at initialization
my_special_property = this.known_property * this.other_known_property;
}
};

有没有办法在不重载 cv::Mat 的所有 26 个构造函数的情况下做这样的事情?有没有办法创建像这样的构造函数:

SpecialMat(AnyArgs args) : Mat(args), my_special_property(/*calculation goes here*/) {}

哪个会调用父类的构造函数?

感谢您的任何建议!

最佳答案

您可以使用可变参数模板。

#include <iostream>
#include <utility>

class Foo {
public:
Foo(int i) {}
Foo(double d, int i) {}
Foo(const Foo& f) {}
Foo(char&& c) {}
};

class Bar : public Foo {
public:
template<typename ...Args>
Bar(Args&&... args)
:Foo(std::forward<Args>(args)...) {
ExtraFunc();
}

private:
void ExtraFunc() {
std::cout << "Calculating extra value\n";
}
};

void Test() {
int i = 0;
double d = 0;
Foo f{i};

Bar{i};
Bar{d, i};
Bar{f};
Bar('a');
}

Godbolt

关于c++ - 父类有 26 个构造函数重载。如何在不复制粘贴 26 个重载的情况下将一个小任务附加到所有构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57421758/

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