Описание тега using-declaration
Используйте этот тег для вопросов, связанных с ключевым словом using в C++.
1
ответ
Зачем нужна декларация об использовании именования конструктора?
Оба параграфа, 7.3.3.p1 и p3 в Стандарте C++11, ссылаются на объявление об использовании, именующее конструктор. Почему это необходимо? Код ниже показывает, что базовый класс A конструкторы видны в производном классе B как и ожидалось. class A { int…
08 июл '13 в 17:21
0
ответов
Есть ли обходной путь для расширения пакета параметров при использовании объявлений
Расширение пакета параметров при использовании объявлений не поддерживается в C++ 14, поэтому следующий код не компилируется: template<typename T> struct A { virtual void foo(T); }; template<typename... T> struct B: public A<T>...…
22 дек '15 в 15:05
3
ответа
Должно ли объявление использования скрывать унаследованную виртуальную функцию?
struct level0 { virtual void foo() = 0; }; struct level1 : level0 { virtual void foo() { cout <<" level1 " << endl; } }; struct level2 : level1 { virtual void foo() { cout <<" level2 " << endl; } }; struct level3 : level2 { u…
12 янв '11 в 13:53
2
ответа
Почему использование не может быть использовано для определения виртуальной функции?
Я недавно обнаружил использование using импортировать функцию базового класса в пространство имен производного класса (когда он скрыт). Я пытался использовать его для импорта функции из базового класса в качестве реализации функции в производном кла…
27 июн '13 в 09:04
1
ответ
Импортирует ли объявление об использовании только перегрузки, объявленные выше объявления об использовании?
Например, GCC и clang не могут скомпилировать следующий код: struct S {}; namespace N { void g(S); } using N::g; namespace N { void g(int); } int main() { g(0); } с ошибкой: test.cpp: In function 'int main()': test.cpp:17:8: error: could not convert…
09 май '12 в 04:53
1
ответ
Объявление использования не может повторяться в области действия функции. Это почему?
В [namespace.udecl]/10 у вас есть следующий пример: namespace A { int i; } namespace A1 { using A::i; using A::i; // OK: double declaration } void f() { using A::i; using A::i; // error: double declaration } Этот фрагмент компилируется в лязг.
04 июл '15 в 14:54
2
ответа
Почему в реализации функции-члена тип результата не может быть описан с помощью определения в классе?
Реорганизовав некоторый код, я обнаружил, что если у меня есть определение функции-члена вне класса, его возвращаемый тип не может использовать имена, определенные с помощью "using" внутри этого класса. #include <iostream> class Foo { public: …
27 ноя '18 в 00:47
1
ответ
Использование декларации (производный класс)
struct B1{ int d; void fb(){}; }; struct B2 : B1{ using B1::d; using B1::fb; int d; // why this gives error? void fb(){} // and this does not? }; int main(){} Это потому что B1::fb() рассматривается как B1::fb(B1*) and B2::fb() рассматриваемый как B…
23 авг '10 в 04:48
2
ответа
Способ использовать все неквалифицированные имена в классе перечисления C++0x?
Новый C++ (C++0x или C++11) имеет новый тип enum, "enum class", где имена ограничиваются перечислением (среди прочего). enum class E { VAL1, VAL2 }; void fun() { E e = E::VAL1; // Qualified name } Мне интересно, однако, могу ли я выборочно использов…
17 сен '11 в 18:53
1
ответ
Вызов объявленного псевдонимом конструктора базового класса в другом пространстве имен
Я пытаюсь понять некоторые детали объявленных псевдонимами классов через C++11 using и как / почему это влияет на вызов конструктора базового класса. Пример кода #include <iostream> namespace N { template<typename T> struct Foo { // Foo(…
16 янв '13 в 16:42
4
ответа
C++ с использованием ключевого слова
В чем разница между этими двумя using ключевое слово: using boost::shared_ptr; а также using namespace boost;
07 авг '11 в 13:43
3
ответа
В C++ можно переименовать / псевдоним не пространство имен, имя не класса?
Я имею namespace src { struct src_bar; void src_baz(); template<class T> class src_qux; } который я хотел бы сослаться на namespace dst { struct dst_bar; void dst_baz(); template<class T> class dst_qux; } Это означает, что я хотел бы "пе…
01 фев '12 в 04:15
3
ответа
Использование объявлений и константных перегрузок
Предположим, у меня есть две версии operator-> (перегружен на const) в базовом классе. Если я говорю using Base::operator->; в производном классе я получу доступ к обеим версиям или только к неконстантной?
09 авг '11 в 13:48
2
ответа
Наследование родительского оператора присваивания при неявном удалении потомка
В GCC 4.6 возможно наследовать операторы присваивания родителя, даже если дочерние операторы присваивания неявно удалены из-за конструктора перемещения. В более поздних версиях GCC (а также Clang) это больше невозможно. Как правильно, чтобы дочерний…
01 апр '13 в 21:58
0
ответов
IntelliSense: переопределение шаблона псевдонима
IntelliSense в Visual Studio 2017 (15.1) подчеркивает слово Type в следующем коде: #include <type_traits> template<class... Vars> struct Test : std::true_type { }; template<class... TT> using Type /*!*/ = std::conditional_t<std:…
12 май '17 в 14:24
0
ответов
Visual Studio 2015 ошибка? Неоднозначный доступ к функциям-членам, порядок переопределения классов предков с помощью оператора
Я что-то упустил или обнаружил ошибку в Visual Studio? Ошибки в стороне, использование этого типа наследства - ОК или зло? GCC 4.9.0 дает мои ожидаемые результаты: base.getProperty() 1 otherBase.getProperty() 2 derivedA.getProperty() 1 derivedB.getP…
29 апр '15 в 04:52
2
ответа
Почему конструктор перемещения не используется при объявлении
В следующем коде конструктор перемещения производного класса, очевидно, не генерируется, хотя базовый класс является конструируемым перемещением. #include <cstddef> #include <memory> #include <cstring> #include <cassert> temp…
25 дек '17 в 12:30
1
ответ
Использование объявления содержит нерасширенный пакет параметров
Как мне получить этот код для компиляции? struct type1 {}; struct type2 {}; struct handler1 { void handle(type1){} }; struct handler2 { void handle(type2){} }; template <typename... Handlers> struct TheHandler : Handlers... { using Handlers::h…
17 окт '17 в 00:38
1
ответ
Что не так с этим использованием шаблона `using` декларации
Что не так со следующим использованием шаблона using декларация? template <typename T1, typename T2> struct A { template <typename AnotherT1> using MyTemplate = A<AnotherT1, T2>; }; template<class SomeA> struct B { using MyTy…
03 апр '16 в 14:39
1
ответ
using-объявление в производном классе не скрывает ту же функцию, производную от базового класса
Посмотрите на следующий код: struct A { public: virtual void f(){std::cout << "in A";}; }; struct B : A{ public: virtual void f(){std::cout << "in B";}; int a; }; struct C : B{ using A::f; void test(){f();} }; int main() { C c; c.f(); //…
11 фев '15 в 08:03