gpt4 book ai didi

c++ - 特化类模板的成员函数模板

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:35 25 4
gpt4 key购买 nike

我有以下代码:

#include <stdio.h>

template<int A>
class Thing
{ // 5
public:
Thing() :
data(A) {
}

template<int B>
Thing &operator=(const Thing<B> &other) {
printf("operator=: A = %d; B = %d\n", A, B);
printf("this->data = %d\n", data);
}

private:
int data;
};

int main() {
Thing<0> a, b;
Thing<1> c;

a = b;
a = c;
c = b;

return 0;
}

我需要专攻Thing<A>::operator=对于 A == B .我试过这个:

template<int B>
template<int A>
Thing<A> &Thing<A>::template operator=(const Thing<A> &other) { // 23
printf("operator= (specialized): A = %d; B = %d; A %c= B\n", A, B, (A == B) ? '=' : '!');
printf("this->data = %d; other.data = %d\n", data, other.data);
}

但是,我收到 g++ 的编译错误:

23: error: invalid use of incomplete type ‘class Thing<B>’
5: error: declaration of ‘class Thing<B>’

我试过使用 if(A == B)operator=没有特化。但是,我收到访问私有(private)成员的错误 data ,我需要访问哪里 A == B .

如何正确特化我的成员函数模板 operator=类模板 Thing

最佳答案

我不认为你需要专门化它,你不能只为 operator= 提供一个重载吗?

template<int A>
class Thing
{ // 5
public:
Thing() :
data(A) {
}

template<int B>
Thing &operator=(const Thing<B> &other) {
printf("operator=: A = %d; B = %d\n", A, B);
printf("this->data = %d\n", data);
}

Thing &operator=(const Thing &other) {
printf("operator overload called");
printf("this->data = %d\n", data);
}

private:
int data;
};

如果您尝试将重载与特化相结合,IIRC 会出现一些查找陷阱,但这在这里看起来没有必要。

关于c++ - 特化类模板的成员函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1132951/

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