Re: Explicit typedef
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). 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
}
I'm not saying it could not be done, but it would be much easier to
let the compiler understand that two types defined by typedefs are not
compatible.
--
Erik Wikstr=F6m