N***m 发帖数: 4460 | 1 effective c++上面的讲proxy class,给的例子只有轮廓,但没有具体实现。
我就练习一下。问题是
ostream& operator << (ostream& os, const Array2D & a)必须要const_cast,
不然编译不通过。我尝试把Array1D operator[](int pos)声明为const,也不行。
我哪个地方搞错了?还有typeid(T)返回的是i和3Foo,不是integer和Foo,
这个是不是和编译器有关?
/*
use of proxy class
*/
#include
#include
using namespace std;
// class Foo is some type for test Array2D later;
class Foo {
int val;
public:
Foo(){}
Foo(int i):val(i){}
friend ostream & operator<<(ostream& os, const Foo & b);
} |
N***m 发帖数: 4460 | 2 问题找到了,忘记写成const T& operator[](int pos) const。总而言之
大家都const就没问题了。如果概念不清楚的话,层数多了容易乱,呵呵。
【在 N***m 的大作中提到】 : effective c++上面的讲proxy class,给的例子只有轮廓,但没有具体实现。 : 我就练习一下。问题是 : ostream& operator << (ostream& os, const Array2D & a)必须要const_cast, : 不然编译不通过。我尝试把Array1D operator[](int pos)声明为const,也不行。 : 我哪个地方搞错了?还有typeid(T)返回的是i和3Foo,不是integer和Foo, : 这个是不是和编译器有关? : /* : use of proxy class : */ : #include
|
X****r 发帖数: 3557 | 3 Array2D和Array1D的operator []都应该有两个版本的,const的和没有const的。
typeid具体返回值的(编译器)实现决定的,你不用管,只要知道对于同一个类型结果
是一样的,不同类型结果不一样就行了。
【在 N***m 的大作中提到】 : effective c++上面的讲proxy class,给的例子只有轮廓,但没有具体实现。 : 我就练习一下。问题是 : ostream& operator << (ostream& os, const Array2D & a)必须要const_cast, : 不然编译不通过。我尝试把Array1D operator[](int pos)声明为const,也不行。 : 我哪个地方搞错了?还有typeid(T)返回的是i和3Foo,不是integer和Foo, : 这个是不是和编译器有关? : /* : use of proxy class : */ : #include
|
N***m 发帖数: 4460 | 4 got you~
都是偷懒惹的祸~~
typeid输出不太美观啊,直接Integer和Foo不是很好吗?
【在 X****r 的大作中提到】 : Array2D和Array1D的operator []都应该有两个版本的,const的和没有const的。 : typeid具体返回值的(编译器)实现决定的,你不用管,只要知道对于同一个类型结果 : 是一样的,不同类型结果不一样就行了。
|