Re: Explicit typedef
On 8 Maj, 08:42, Erik Wikstr=F6m <eri...@student.chalmers.se> wrote:
On 8 Maj, 03:51, Gianni Mariani <gi3nos...@mariani.ws> wrote:
jlongstr...@gmail.com wrote:
Please correct any misconceptions, or voice concerns about this being
a stupid idea in general.
Not stupid but it's called a class !
You can use templates to do what you're doing.
I'm not sure I completely agree, one of the most common usages for
such a typedef would probably be to create new types based on the
built-in types, and while it's possible to create a class that
perfectly mimics an int, it would be (relatively) very much work in
proportion to the benefits. And as soon as I wanted a second kind of
type, also behaving like an int I'd have to copy the whole class.
Using templates you can get away with using just one class definition,
but you still need that one definition. And there is always the risk
that the compiler won't be able to optimize away the wrapping (perhaps
not a big risk but anyway).
That doesn't matter that much. Firstly because all modern compilers (I
know of) will remove the wrapping, and secondly because you could
simply
I've come up with the following, perhaps
someone have a better solution?
template<int N>
class MyInt{
int data;
public:
MyInt(int i) : data(i) { }
MyInt(const MyInt<N>& i) : data(i.data) {}
MyInt<N>& operator=(const MyInt<N>& i) { data = i.data; return
*this; }
/*operations etc*/
};
int main()
{
typedef MyInt<1> length;
typedef MyInt<2> volume;
length x = 5;
volume y = 1;
y = x; // Fail
But you would probably want to allow y = x*x*x; (disregarding for the
moment the wisdom of using int to store weights and lengths).
This is exactly what the solution linked to by Gianni does and why an
"explicit typedef" is an insuffucient solution.
/Peter