LINUX.ORG.RU

Using alias использующийся в кроссинклюдированном заголовочнике

 


0

2

one_example.h

#include "two_example.h"

using foo = int;

void bar(foo);

two_example.h

#include "one_example.h"

void baz(foo);

error: unknown type name 'qualIndex'

Как правильно это решить?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)
using foo = int;

#include "two_example.h"

void bar(foo);
AlexVR ★★★★★
()

Хотя правильнее перенести определение foo в отдельный заголовочный файл. А взаимный инклуд убирай из заголовочный файлов.

AlexVR ★★★★★
()

using в заголовочных файлах — один из верный способов если не отстрелить себе ногу, то уж точно поковырять ножиком.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

using в заголовочных файлах — один из верный способов если не отстрелить себе ногу, то уж точно поковырять ножиком.

в своих неймспейсах - почему бы и нет

Stil ★★★★★
()
Ответ на: комментарий от deterok

Нарушение принципа наименьшего удивления. Даже если ты сам используешь свой код, со временем детали реализации забываются. Кто-то может сказать, что если правильно раскладывать грабли, и ходить между них с фонариком, ничего не случится. Но это то ещё развлечение.

i-rinat ★★★★★
()
Ответ на: комментарий от deterok

Честно говоря, нет опыта с C++11, да и вообще с C++ маловато. Если он аналогичен typedef'у, почему не использовать typedef. Или он объявлен устаревшим?

Те using, к которым я привык, тащили кучу функций в область видимости. И в заголовках приносили кучу пятиминуток недоумения, когда названия функций совпадали.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Потому что можно сделать шаблонный typedef, а typedef-ом - нет. Что-то типа:

template<typename T>
using my_vector = std::vector<T, my_cool_allocator<T>>;

Плюс унификация стиля объявлений: kw name = what; для переменных kw - auto, для типов - using.

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)
Ответ на: комментарий от i-rinat

А эта штука теперь корректно работает? Или всё так же надо писать > >?

Но меня не ломит писать > >

AlexVR ★★★★★
()
Ответ на: комментарий от i-rinat

Если он аналогичен typedef'у, почему не использовать typedef. Или он объявлен устаревшим?

typedef void (*FunctionPtr)();

using FunctionPtr = void (*)();

Что читабельнее?

Pavval ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.