gpt4 book ai didi

c++ - 我的类的可变参数模板构造函数不能修改我的类成员,为什么会这样?

转载 作者:IT老高 更新时间:2023-10-28 21:50:29 25 4
gpt4 key购买 nike

我一直在处理我们教授的任务,我必须在其中解决可变参数模板类。问题是,我无法修改递归构造函数中的类成员。我不知道为什么会这样,一旦进入下一个构造函数调用,它就会丢弃我对变量的更改。

我尝试过的:

  • 使用指针 int* count 而不是 int count

  • 使用setter设置计数器

我已经用谷歌搜索了几个小时,但找不到解决办法。

头文件“test.h”:

#include <cstdarg>
#include <iostream>

class Counter {
private:
int count = 0;
int tmp;

public:
template <typename... Rest> Counter (int t, Rest... rest) {
count++;
std::cout << "start recursive number " << count << "...\n";
Counter(rest ...);
tmp = t;
std::cout << "end recursive number " << count << "...\n";
}
Counter (int t) {
count++;
tmp = t;
std::cout << "reached end of recursive -> " << count << "\n";
}
};

main.cpp:

#include "test.h"
int main () {
Counter a {0, 1, 2, 3, 4};
}

我得到的输出:

start recursive number 1...
start recursive number 1...
start recursive number 1...
start recursive number 1...
reached end of recursive -> 1
end recursive number 1...
end recursive number 1...
end recursive number 1...
end recursive number 1...

最佳答案

Counter(rest ...); 创建一个未命名的临时对象,它不会递归调用该对象的构造函数。每个对象都有自己的 count 生成,因此您会得到 1 1 1 1

的流

如果你想将对象初始化委托(delegate)给不同的构造函数,那么它应该出现在成员初始化列表中。不过,这似乎不是一个好主意:

template <typename... Rest> Counter (int t, Rest... rest)
: Counter{rest...}
{
count++;
std::cout << "start recursive number " << count << "...\n";
tmp = t;
std::cout << "end recursive number " << count << "...\n";
}

关于c++ - 我的类的可变参数模板构造函数不能修改我的类成员,为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55665792/

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