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

4

У меня возникли проблемы с перегрузкой методов в 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)

Как компилятор будет различать эти два параметра, если они оба имеют одинаковую сигнатуру для компилятора? chris

Ваш Ответ

3   ответа
2

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

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

Быть типобезопасным - это кодовый запах?
1

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, то у вас не возникнет никаких проблем.

5

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

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

Похожие вопросы