Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Конвертер" для типа 
:(
    Опции темы
mrgloom
Дата 27.8.2013, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



допустим функция принимает 
Код

const Point<T> 
 , а я передаю стандартный 
Код

CPoint
 понятное дело я могу взять pt.x pt.y и подставить в конструктор, но есть ли какой то более изящный способ?
PM MAIL   Вверх
SenkraD
Дата 27.8.2013, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



ну можете перегрузку сделать для функции или написать глобальный оператор преобразования типа,  или сделать конструктор у класса Point<T>, который принимает CPoint, тогда этот конструктор будет использоваться как оператор преобразования


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
mrgloom
Дата 27.8.2013, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



а что такое
Цитата

 глобальный оператор преобразования типа

?

преобразования вида 
Код

(type) variable

работает только для структур?
PM MAIL   Вверх
SenkraD
Дата 27.8.2013, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



с оператором приведения типа я ошибся маленько, так что он отпадает и если нельзя править класс Point<T>, то отсается или делать функцию прокладку, которая будет создавать временный обьект типа Point<T> c CPoint, или перегружать функцию и прятать всю конвертацию в нее


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
mrgloom
Дата 28.8.2013, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



как раз функция прокладка или перегрузка мне не нужна, а изменение Point<T> возможно.

по идее всё таки надо просто написать конструктор Point<T>  для CPoint.

но интересно как можно сделать так
Код

func(Point<int> (CPoint))


PM MAIL   Вверх
SenkraD
Дата 28.8.2013, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



можете показать протототип нужжной вам функции? она шаблонная? или принимает конкретную специализацию класса?
пока лучше этого не придумал:
Код
#include <cstddef>
#include <iostream>

struct CPoint
{
    std::size_t x;
    std::size_t y;
};

template <typename T>
struct Point
{
    Point(void)
        : x(0)
        , y(0)
    {
    }

    template<class PointType>
    Point(PointType const& point)
        : x(point.x)
        , y(point.y)
    {
    }

    T x;
    T y;
};

template <typename T>
void processPoint(Point<T> const& point)
{
    std::cout << "Point: [" << point.x << ", " << point.y << "]" << std::endl;
}

int main(int argc, char* argv[])
{
    Point<int> point;
    {
        point.x = 3;
        point.y = 4;
    }
    processPoint(point);

    CPoint cpoint = {5, 6};
    processPoint<int>(cpoint);        // I think that this one is better
    processPoint(Point<int>(cpoint)); // than it
    return 0;
}


Это сообщение отредактировал(а) SenkraD - 28.8.2013, 11:10


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1183 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.