Ваш выбор
АЛЬТЕРНАТИВА 1
Вы можете использовать шаблоны
template <typename T>
T myfunction( T t )
{
return t + t;
}
АЛЬТЕРНАТИВА 2
Простая функция перегрузки
bool myfunction(bool b )
{
}
int myfunction(int i )
{
}
Вы предоставляете разные функции для каждого типа каждого аргумента, который вы ожидаете. Вы можете смешать это Вариант 1. Компилятор будет правильным для вас.
АЛЬТЕРНАТИВА 3
Вы можете использовать союз
union myunion
{
int i;
char c;
bool b;
};
myunion my_function( myunion u )
{
}
АЛЬТЕРНАТИВА 4
Вы можете использовать полиморфизм. Может быть излишним для int, char, bool, но полезно для более сложных типов классов.
class BaseType
{
public:
virtual BaseType* myfunction() = 0;
virtual ~BaseType() {}
};
class IntType : public BaseType
{
int X;
BaseType* myfunction();
};
class BoolType : public BaseType
{
bool b;
BaseType* myfunction();
};
class CharType : public BaseType
{
char c;
BaseType* myfunction();
};
BaseType* myfunction(BaseType* b)
{
//will do the right thing based on the type of b
return b->myfunction();
}