gpt4 book ai didi

c++ - 包含循环类以保持 C++ 的向后兼容性

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

我有两个类,分别是ABB 类包含 A 类的拷贝:

class A
{
//Some definitions
double func_A(double val);
}
class B
{
A local_class_A;

template <typename T>
T func_B(T val);
}

B 中包含类A 的原因是A 包含B 中所需的值。

现在函数func_B()func_A()的泛化版本,而后者只取double,前者是模板相关函数。否则两者都在做完全相同的计算。
现在我想把这两个函数放在一个函数中,以减少可能出现的错误。理论上可以在将来通过调用 func_B() 来完成,但我仍然想保留 func_A(),以免破坏遗留代码。因此,一种想法是在 func_A() 内部调用 func_B(),从而将所有内容重定向到一个函数。但这将是一个循环,在 A 之后包含 B,后者又包含 A,我想避免这种情况。

所以,简而言之:我在两个类中有两个函数,它们做的完全一样。我想将这两个函数指向一个代码行,但我仍然会保留这两个函数。由于向后兼容性和循环依赖性,我不能将一个函数包含到另一个函数中。我能做些什么来解决这个问题?

最佳答案

您可以使用模板特化:

使用模板,我们编写一次代码并将其用于任何数据类型,包括用户定义的数据类型。如果出现问题,我们需要为特定数据类型使用不同的代码,那么在 C++ 中可以为特定数据类型获得特殊行为。这称为模板特化。

template <typename T>
class A
{
public:
A(){ cout << "A()\n"; }
T add(T x, T y);
};

template <typename T>
T A<T>::add(T x, T y)
{
return x+y;
}

// Specialized class
template <>
class A <char>
{
public:
A() { cout << "Special A()\n"; }
char add(char x, char y);
};

char A<char>::add(char x, char y)
{
int i = x-'0';
int j = y-'0';
return i+j;
}

关于c++ - 包含循环类以保持 C++ 的向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49793610/

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