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

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

Восстановить пароль Регистрация
 
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
28.07.2014, 12:32     Как можно явно вызвать оператор преобразования? #1
Доброго времени суток

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

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     Как можно явно вызвать оператор преобразования?
Посмотрите здесь:

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? C++
Как можно вызвать стандартное окно для выбора папок? C++
C++ Как вызвать в главной программе оператор унарный минус
Как вызвать оператор базового класса в наследнике? C++
вызвать неперегруженный оператор при наличии перегруженного C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 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
636 / 557 / 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
636 / 557 / 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
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 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
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 13:41     Как можно явно вызвать оператор преобразования? #8
Ilot, я все конечно понимаю, но какой это шаблон то? точнее какая от этого польза?
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
28.07.2014, 13:44     Как можно явно вызвать оператор преобразования? #9
Цитата Сообщение от aLarman Посмотреть сообщение
Ilot, я все конечно понимаю, но какой это шаблон то? точнее какая от этого польза?
Это вопрос не ко мне, а к ТС. Он хотел вызвать шаблонный оператор double я показал как это можно сделать. Так что тапками не в меня нужно бросать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 13:47     Как можно явно вызвать оператор преобразования?
Еще ссылки по теме:

Как можно сделать что бы в консольном окне можно было вызвать контекстное меню как в win cmd? C++
C++ Оператор преобразования типа и его эквивалентные замены, поиск строки в текстовом файле , содержащей заданный
C++ Оператор преобразования

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

Или воспользуйтесь поиском по форуму:
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.07.2014, 13:47     Как можно явно вызвать оператор преобразования? #10
Цитата Сообщение от Ilot Посмотреть сообщение
Так что тапками не в меня нужно бросать
так и получается что другие параметры туда не передать)

Не по теме:

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

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

Текущее время: 02:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru