Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
#1

Как можно явно вызвать оператор преобразования? - C++

28.07.2014, 12:32. Просмотров 455. Ответов 9
Метки нет (Все метки)

Доброго времени суток

Как можно явно вызвать такой оператор преобразования?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct CL
{
    template <class A, class B, class C>
    operator double()
    {
        return 6.6;
    }
};
 
int main()
{
    CL cl;
    cl.operator double<int, int, int>();  //error
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2014, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как можно явно вызвать оператор преобразования? (C++):

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? - C++
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот главный класс class A{ public: A (){}; class...

Как можно сделать что бы в консольном окне можно было вызвать контекстное меню как в win cmd? - C++
Если вызвать cmd в windows то в нем можно вызывать контекстное меню и совершать различные полезные действия (копирование/вставка). А те...

Как вызвать оператор базового класса в наследнике? - C++
Всем привет! Имеется такая конструкция (мой вопрос - в комментарии к последнему классу): class A { A(); ~A(); virtual...

Как вызвать в главной программе оператор унарный минус - C++
Paint operator-(const Paint&amp; p) { return Paint(-p.x,-p.y); }

Оператор преобразования - C++
Приветствую всех! Есть у Р. Лафоре в книге &quot;Объектно-ориентированное программирование в C++&quot; такой пример: //ENGLCONV.cpp ...

Как можно правильно вызвать apply в следующей ситуации... - C++
Здравствуйте. Хотел использовать метод apply для перебора элементов контейнера valarray. Но мне нужно получать доступ ко внешней...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 12:35 #2
C++
1
cl.operator double<int, int, int>()();
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
28.07.2014, 12:41  [ТС] #3
Не работает, https://ideone.com/ofRNYg
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 12:54 #4
быть может как то так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class CL
{
public:
    template <typename A, typename B, typename C>
    double operator ()()
    {
        return 6.6;
    }
};
 
int main()
{
    CL cl;
    double x = cl.operator()<int,int,int> ();
}
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
28.07.2014, 12:59  [ТС] #5
Но только это уже оператор вызова функции, а не оператор преобразования
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 13:36 #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
вот кстати
A specialization of a conversion function template is referenced in the same way as a non-template conversion
function that converts to the same type. [
Example:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct A {
template <class T> operator T*();
};
template <class T> A::operator T*(){ return 0; }
template <> A::operator char*(){ return 0; }
// specialization
template A::operator void*();
// explicit instantiation
int main() {
A a;
int *ip;
ip = a.operator int*();
// explicit call to template operator
//
A::operator int*()
}

end example
] [
Note:
Because the explicit template argument list follows the function template name,
and because conversion member function templates and constructor member function templates are called
without using a function name, there is no way to provide an explicit template argument list for these
function templates.
—end note

]
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,070
Записей в блоге: 5
Завершенные тесты: 1
28.07.2014, 13:39 #7
aLarman, думаю способ все-таки есть, а именно указывать параметры шаблона значениями по умолчанию. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
struct CL
{
    template <typename A = int, int B = 11>
    operator double() {
        return 6.6;
    }
};
 
int main()
{
    CL cl;
    double x = cl.operator double();
    return 0;
}
Иначе все же вывести параметры шаблона или указать явно при вызове боюсь невозможно.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 13:41 #8
Ilot, я все конечно понимаю, но какой это шаблон то? точнее какая от этого польза?
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,070
Записей в блоге: 5
Завершенные тесты: 1
28.07.2014, 13:44 #9
Цитата Сообщение от aLarman Посмотреть сообщение
Ilot, я все конечно понимаю, но какой это шаблон то? точнее какая от этого польза?
Это вопрос не ко мне, а к ТС. Он хотел вызвать шаблонный оператор double я показал как это можно сделать. Так что тапками не в меня нужно бросать
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 13:47 #10
Цитата Сообщение от Ilot Посмотреть сообщение
Так что тапками не в меня нужно бросать
так и получается что другие параметры туда не передать)

Не по теме:

это не тапки, а конструктивная критика, тапки выглядели бы примерно так: что это за фигня? она не работает? это только в 11ом стандарте прокатывает, Вы ничего не понимаете и т.д.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 13:47
Привет! Вот еще темы с ответами:

Как можно вызвать стандартное окно для выбора папок? - C++
Из С++ нужно вызвать стандартное окно для выбора папок. Что-то типа GetOpenFileName, только для папок. Господа программеры,...

Как реализовать функцию-член, которую можно вызвать только один единственный раз? - C++
Доброго времени суток. Моя проблема в том, что при создании экземпляра дочернего класса, выполняется функция DoSmth() хотя, уже есть...

вызвать неперегруженный оператор при наличии перегруженного - C++
привет всем. возникла такая проблема: есть два объекта одного класса и перегруженный оператор=. одним из полей этих объектов является...

Оператор преобразования типа и его эквивалентные замены, поиск строки в текстовом файле , содержащей заданный - C++
Господа, был бы очень признателен если бы кто то помог ответить на вапросы http://cs616225.vk.me/v616225102/122f8/5kAaFEGoDn0.jpg


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2014, 13:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru