Перегрузка методов-членов с псевдонимами typedef в качестве параметров

У меня возникли проблемы с перегрузкой методов в C ++.

<code>typedef char int8_t;
class SomeClass{
public:
…
void Method(int8_t paramater);
void Method(char paramater);
};
</code>

посколькуint8_t typedef aschar это просто псевдонимы, они могут относиться к тому же типу, в этом случае перегрузка не сработает.

Я хочу, чтобы они работали одновременно? Можете ли вы предложить решение того же. Примечание: я не хочу добавлять шаблонный метод.

Ниже приводится ошибка:

Error: Multiple declaration for SomeClass::Method(char)

 chris14 мая 2012 г., 13:35
Как компилятор будет различать эти два параметра, если они оба имеют одинаковую сигнатуру для компилятора?

Ответы на вопрос(3)

Решение Вопроса

void Method(char paramater);
void Method(signed char paramater);
void Method(unsigned char paramater);

Если реализация определяетint8_t, и если определение соответствует одному из этих трех, то будет вызвана правильная функция.

Однако хитрая реализация может сделать что-то вроде этого:

typedef __special_secret_sauce int8_t;

а затем вам нужно будет определить другую перегрузку дляint8_t, Вам довольно сложно определить другую перегрузку дляint8_t бороться с этими реализациями и в то же время не определять его для реализаций, которые typedefint8_t какsigned char, Кто-то еще сказал, что это даже невозможно.

Там могут быть реализации, гдеint8_t не существует вообще. Если вы просто определите перегрузки для трех вариантов char, то у вас не возникнет никаких проблем.

19;t work. I want to make them work at the same time?

К счастью, это невозможно (даже приtemplates). Потому что это убивает саму цельtypedef.
Если вы намереваетесь сделать это в своем коде, то этоcode smell; Возможно, вам придется изменить свой дизайн.

 12 нояб. 2018 г., 14:20
Быть типобезопасным - это кодовый запах?

char или жеint8_t в структуре и использовать структуру в качестве параметра.

 14 мая 2012 г., 14:08
Вы можете использовать что-то вроде:struct faux_int8_t{ int8_t x;};
 25 авг. 2012 г., 15:06
@ user1393608 тогда делайtypedef struct {char x;} faux_char;, Если ваша конкретная платформа не поддерживает структуры, это будет прекрасно работать как на C, так и на C ++.
 user139360814 мая 2012 г., 14:04
К сожалению, я не могу, так как я использую этот typedef с платформы Solaris int_types.h
 user139360814 мая 2012 г., 14:28
Так как я использую typedef с платформы Solaris int_types.h, я не могу использовать вышеупомянутую структуру, которую вы упомянули.
 25 авг. 2012 г., 15:07
This является правильным и наименее взломанным ответом.

Ваш ответ на вопрос