gpt4 book ai didi

c++ - 如何指定函数参数的常量是可选的?

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

假设我有两个类需要遍历其他类的成员

class Reader {
public:
template<typename T>
void Process(const T& t) {
Traverse(*this, t);
}
//... ends of recursion
};

class Writer {
public:
template<typename T>
void Process(T& t) {
Traverse(*this, t);
}
//... ends of recursion
};

并且我为 ReaderWriter 需要处理的每个类提供函数 Traverse 的重载。例如:

class Foo {
public:
template<typename T>
friend void Traverse(T& t, const Foo& foo) { // for class Reader
t.Process(foo.m1);
t.Process(foo.m2);
}

template<typename T>
friend void Traverse(T& t, Foo& foo) { // for class Writer
t.Process(foo.m1);
t.Process(foo.m2);
}
private:
int m1;
int m2;
};

Foo 类体中函数Traverse 的上述两次重载几乎相同。我怎样才能把它们合二为一?

最佳答案

传递给 const 参数的任何非 const 值都将被转换为 const 因此您不必将第二个 Traverse() 除非你真的需要修改 foo

关于c++ - 如何指定函数参数的常量是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28811010/

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