Описание тега 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…
0 ответов

Подстрочный оператор и неявное преобразование в тип указателя

Я читаю шаблоны C++ - полное руководство, 2-е издание и B.2.1 рассказывает о неявном преобразовании подразумеваемого аргумента "this". Тот же пример здесь: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1592.pdf В зависимости от typedef дл…
3 ответа

Взаимопреобразование объектов двух разных классов с помощью оператора преобразования

Как работает оператор преобразования, определенный в классе B, в следующем коде? Я прочитал все другие статьи, связанные с операторами преобразования при переполнении стека, но не смог найти объяснения взаимопревращения объектов двух разных классов.…
2 ответа

Является ли оператор void*() преобразованием по-прежнему частью библиотеки C++?

Рассмотрим эту программу: #include <iostream> int main() { delete std::cout; } AFAIK оператор функции преобразования void* () const был удален из C++11. Таким образом, эта программа должна потерпеть неудачу при компиляции на компиляторе C++11.…
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;} …
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]; }; но лязг жалует…
1 ответ

Перегрузка оператора преобразования

Я хочу различать оператор преобразования шаблона между &, * и значениями: struct S { template <class T> constexpr operator T() { return value; } template <class T> constexpr operator T&() { return value; } template <class T> co…
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…
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…
2 ответа

Как мне выполнить битовые операции над структурой?

У меня есть структура битового поля, на которой я хочу выполнять побитовые операции с использованием масок. Я хочу знать самый простой и эффективный способ сделать это. Я попытался использовать мой оператор преобразования (который кажется неэффектив…
4 ответа

Операторы преобразования в C++

Пожалуйста, помогите мне понять, как именно работают операторы преобразования в C++. У меня есть простой пример, который я пытаюсь понять, хотя не очень понятно, как преобразование происходит на самом деле. class Example{ public: Example(); Example(…
05 сен '09 в 15:33
3 ответа

STL: как перегрузить operator= для <vector>?

Есть простой пример: #include &lt;vector&gt; int main() { vector&lt;int&gt; veci; vector&lt;double&gt; vecd; for(int i = 0;i&lt;10;++i){ veci.push_back(i); vecd.push_back(i); } vecd = veci; // &lt;- THE PROBLEM } Мне нужно знать, как перегрузить опе…
03 фев '10 в 15:40
1 ответ

clang++ терпит неудачу, но g ++ успешно использует приведение к оператору const-unrelated-type в присваивании

Вот короткий пример, который воспроизводит это "нежизнеспособное преобразование" с лимоном для clang, но справедливо для g ++ различий в поведении компилятора. #include &lt;iostream&gt; struct A { int i; }; #ifndef UNSCREW_CLANG using cast_type = co…
1 ответ

Есть ли способ заставить автоматический вывод учитывать оператор <some_type>() при назначении копии?

У меня есть переменная оболочка, которая сигнализирует об изменениях, когда базовая переменная изменяется через эту оболочку, поэтому другие объекты могут прослушивать изменения. Он работает нормально (то есть я могу назначать, добавлять, вычитать, …
1 ответ

Разница между возвращаемым значением и локальной переменной

Предположим, у меня есть #include &lt;string&gt; class A { public: template&lt;class T&gt; 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()…
0 ответов

Явный пользовательский оператор преобразования для лямбды

Статья посвящена лямбда-функциям и особенно касается их ClosureType::operator ret(*)(params)(), В этой статье оператор упоминается как "универсальный шаблон захвата лямбда-функции, определяемый пользователем без захвата". Данный код (автоматическое…