Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c++ class function aliases

I was wondering if there was a simple way to write an alias of a c++ class function. For instance, if I have some list container object, a logical function would be

    int list::length() { return len; }

But another logical alias that programmers might use could be

    int list::size() { return len; }

So, instead of writing both functions with their full body, is there any way to make list::size() an alias of list::length() such that it isn't a duplicate when compiled, but rather references the same function?

I've read that you can do this with #define, but I don't want to cause any confusion with other code-names somewhere totally out of scope (i.e. a 'size' variable).
I've also read that function pointers can fix it, but that isn't exactly an alias (since it has to apply de-referencing), nor can function pointers be given a declaration, giving it a confusing help-line to users (I would think), plus the confusion if ever I need to nest my code inside another object (I have to adjust the scope).

One of my guesses is, will the following be taken as a direct function alias by most optimizing compilers:

    inline int list::length() { return len; }
    inline int list::size() { return length(); }

Or, is there any strict 'alias' syntax for c++? (I couldn't find any - wasn't sure)
So then, what would be the most efficient way of doing this?

EDIT: I've accepted the answer simply to wrap up the question, since it's only a curiosity of mine. Anyone with good information, please add comments or answer, and I may even change my answer.

like image 877
Codesmith Avatar asked Nov 10 '12 01:11

Codesmith


People also ask

What is function aliasing?

Function aliases of this type provide natural-language descriptions and prompting for input parameters to an underlying function rule. You need to create and test the function before defining a function alias rule that references it. You cannot define an alias for a function that returns a complex Java type.

How to define alias in Cpp?

You can use an alias declaration to declare a name to use as a synonym for a previously declared type. (This mechanism is also referred to informally as a type alias). You can also use this mechanism to create an alias template, which can be useful for custom allocators.


1 Answers

I would not use the preprocessor and #define to do this. In general preprocessor should be a last resort in C++. See this C++ FAQ on inline functions which also contains a section on the various evils of using macros of the preprocessor.

The approach I would use would be to have a function that will have several different aliases with a more complicated function and interface you would do something like the following:

int list::length(string xString, int iValue) {
  int iReturnValue = 0;  // init the return value
  //  do stuff with xString and iValue and other things
  return iReturnValue;
}

Then do something like the following for an alias.

inline int list::size(string xString, int iValue) {return length(xString, iValue);}

The inline should basically just replace the alias with the actual function call.

See also this stack overflow posting Giving a function implementation more than one name. It provides some reasons why you might not want to do this.

like image 138
Richard Chambers Avatar answered Oct 30 '22 10:10

Richard Chambers