Описание тега conversion-operator
A language feature to allow an object to specify how it can be converted to another type, either implicitly to satisfy a type restriction or explicitly.
1
ответ
Неоднозначное разрешение с оператором преобразования шаблонов
Я должен был сделать подобный код: #include <type_traits> template<typename S> struct probe { template<typename T, typename U = S, std::enable_if_t< std::is_same<T&, U>::value && !std::is_const<T>::value, in…
24 июн '18 в 20:47
0
ответов
Подстрочный оператор и неявное преобразование в тип указателя
Я читаю шаблоны C++ - полное руководство, 2-е издание и B.2.1 рассказывает о неявном преобразовании подразумеваемого аргумента "this". Тот же пример здесь: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1592.pdf В зависимости от typedef дл…
25 янв '19 в 04:34
3
ответа
Взаимопреобразование объектов двух разных классов с помощью оператора преобразования
Как работает оператор преобразования, определенный в классе B, в следующем коде? Я прочитал все другие статьи, связанные с операторами преобразования при переполнении стека, но не смог найти объяснения взаимопревращения объектов двух разных классов.…
28 июн '17 в 20:27
2
ответа
Является ли оператор void*() преобразованием по-прежнему частью библиотеки C++?
Рассмотрим эту программу: #include <iostream> int main() { delete std::cout; } AFAIK оператор функции преобразования void* () const был удален из C++11. Таким образом, эта программа должна потерпеть неудачу при компиляции на компиляторе C++11.…
16 авг '15 в 14:48
2
ответа
Оператор преобразования C++ в chrono::duration - работает с C++17, но не с C++14 или менее
Следующий код компилируется с gcc 7.1.0 с установленным C++17, но не компилируется с набором C++14 (или Visual Studio 2017). Это легко воспроизвести на Wandbox. Что нужно сделать, чтобы он работал с C++11/14? #include <iostream> #include <c…
21 янв '18 в 10:07
1
ответ
C++ преобразование const передача по ссылке
Для данного шаблона возможно преобразование / преобразование типа по ссылке (без const): class TestA { public: //Needs to be a const return template<typename TemplateItem> operator TemplateItem&() const {TemplateItem A; A = 10; return A;} …
30 сен '11 в 15:12
5
ответов
Проблемы перегрузки операторов Const в C++
У меня проблемы с перегрузкой operator() с константной версией: #include <iostream> #include <vector> using namespace std; class Matrix { public: Matrix(int m, int n) { vector<double> tmp(m, 0.0); data.resize(n, tmp); } ~Matrix() {…
14 мар '10 в 00:27
2
ответа
Как обобщить контейнерные адаптеры с помощью шаблонов?
У меня есть следующий класс: #include <set> #include <stack> #include <queue> #include <string> template <typename T> class MySet { public: const std::stack<T> data() const { std::stack<T> other_cont ( typen…
19 дек '16 в 18:01
1
ответ
Можно ли объявить функцию преобразования, возвращающую ссылку на массив без typedef?
Вот функция преобразования, возвращающая ссылку на массив: struct S { typedef int int_array_20[20]; operator int_array_20& (); }; Можно ли сделать то же самое без typedef? Что я пробовал: struct S { operator int (&()) [10]; }; но лязг жалует…
19 июл '14 в 02:04
1
ответ
Перегрузка оператора преобразования
Я хочу различать оператор преобразования шаблона между &, * и значениями: struct S { template <class T> constexpr operator T() { return value; } template <class T> constexpr operator T&() { return value; } template <class T> co…
25 янв '19 в 19:02
1
ответ
Как мне избежать оператора преобразования для вызова конструктора копирования?
В рамках этапа оптимизации / очистки я пытаюсь понять, как уменьшить количество временных копий. При этом я заметил, что оператор преобразования вызвал конструктор копирования моего класса, которого иначе можно избежать. struct CSetViewer { int s; C…
28 янв '19 в 17:43
2
ответа
Разница между оператором преобразования шаблонов между clang 6 и clang 7
У меня есть код, который использует оператор преобразования шаблонов, чтобы найти тип возвращаемого значения функции, найденной через ADL. Упрощенный код выглядит так: #include <type_traits> template<typename S> struct probe { template&l…
04 окт '18 в 17:06
1
ответ
Как использовать SFINAE, чтобы включить неявность явности оператора преобразования?
Рассмотрим следующий код: // Preamble #include <iostream> #include <type_traits> // Wrapper template <class From> struct wrapper { // Implicit conversion template <class To, class = typename std::enable_if< std::is_convertibl…
29 окт '18 в 15:35
2
ответа
Как мне выполнить битовые операции над структурой?
У меня есть структура битового поля, на которой я хочу выполнять побитовые операции с использованием масок. Я хочу знать самый простой и эффективный способ сделать это. Я попытался использовать мой оператор преобразования (который кажется неэффектив…
18 июл '12 в 10:28
4
ответа
Операторы преобразования в C++
Пожалуйста, помогите мне понять, как именно работают операторы преобразования в C++. У меня есть простой пример, который я пытаюсь понять, хотя не очень понятно, как преобразование происходит на самом деле. class Example{ public: Example(); Example(…
05 сен '09 в 15:33
3
ответа
STL: как перегрузить operator= для <vector>?
Есть простой пример: #include <vector> int main() { vector<int> veci; vector<double> vecd; for(int i = 0;i<10;++i){ veci.push_back(i); vecd.push_back(i); } vecd = veci; // <- THE PROBLEM } Мне нужно знать, как перегрузить опе…
03 фев '10 в 15:40
1
ответ
clang++ терпит неудачу, но g ++ успешно использует приведение к оператору const-unrelated-type в присваивании
Вот короткий пример, который воспроизводит это "нежизнеспособное преобразование" с лимоном для clang, но справедливо для g ++ различий в поведении компилятора. #include <iostream> struct A { int i; }; #ifndef UNSCREW_CLANG using cast_type = co…
12 ноя '15 в 13:58
1
ответ
Есть ли способ заставить автоматический вывод учитывать оператор <some_type>() при назначении копии?
У меня есть переменная оболочка, которая сигнализирует об изменениях, когда базовая переменная изменяется через эту оболочку, поэтому другие объекты могут прослушивать изменения. Он работает нормально (то есть я могу назначать, добавлять, вычитать, …
11 ноя '16 в 10:13
1
ответ
Разница между возвращаемым значением и локальной переменной
Предположим, у меня есть #include <string> class A { public: template<class T> operator T(); A child(); }; void f() { A a; std::string s1 = a; // ok std::string s2 = a.child(); // error (line 34) s1 = a; // error (line 36) s2 = a.child()…
17 янв '13 в 12:37
0
ответов
Явный пользовательский оператор преобразования для лямбды
Статья посвящена лямбда-функциям и особенно касается их ClosureType::operator ret(*)(params)(), В этой статье оператор упоминается как "универсальный шаблон захвата лямбда-функции, определяемый пользователем без захвата". Данный код (автоматическое…
21 окт '15 в 20:52