【发布时间】:2021-11-09 19:56:28
【问题描述】:
在 C++17 或更早版本中是否有任何方法可以在下面的代码中使用函数 compute 的单个模板实现?
template <typename T>
class C
{
public:
T x, y;
C() = default;
C(T x, T y) : x(x), y(y) {}
operator T() const { return x; }
C operator +(const C<T> &c) const { return C(x + c.x, y + c.y); }
C operator +(const T &t) const { return C(x + t, y); }
};
template <typename T>
void compute(C<T> *a, T *b, size_t size)
{
while (size--)
a[size] = a[size] + b[size];
}
template <typename T>
void compute(T *a, C<T> *b, size_t size)
{
while (size--)
a[size] = a[size] + b[size];
}
template <typename T>
void compute(C<T> *a, C<T> *b, size_t size)
{
while (size--)
a[size] = a[size] + b[size];
}
int main()
{
const size_t size = 4;
C<float> a[size];
float b[size];
compute(a, b, size);
compute(b, a, size);
compute(a, a, size);
}
【问题讨论】:
-
你不能在模板中添加另一个类型
U吗? -
你想做到多严格?
C<float>[]和double[]可以吗? -
有,但不漂亮。如果您关心的是重复主体,您总是可以拥有每个函数调用的通用实现。
-
temnplate <typename A,typename B> void compute(A* a,B* b,size_t size)有什么问题? -
目的是在
*a和*b参数的情况下,我需要强制 C 具有完全相同的类型。喜欢C <T> *a, T *b。是的,我关心的是重复体,