Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2012, 15:18   #21
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Если передаваемый в функцию объект константен, то и ссылка константной будет.
У меня похоже, уже template головного мозга))

Код:
template<class T>struct IsConst
{
    IsConst() { cout<< "no const\n"; }
};
template<class T>struct IsConst<const T>
{
    IsConst() { cout<< "const\n"; }
};

template <typename T>
void modify (T &value) 
{
    IsConst<T>();
}

int main()
{
    int x = 10;
    const int y = 20;

    modify (x);
    modify (y);
    modify (10); // : error C2664: modify: невозможно преобразовать параметр 1 из 'int' в 'int &'

    return 0;
}
Он не прожовывает магические числа

Последний раз редактировалось _Bers; 04.08.2012 в 16:24.
_Bers вне форума Ответить с цитированием
Старый 04.08.2012, 15:46   #22
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Да, но с этим ничего не поделать, разве только использовать rvalue-reference из C++11 или константные ссылки. Но покажите сценарий использования, пока что я не увидел целесообразности Ваших чаяний. Быть может и не нужен универсальный механизм для всех параметров?
netrino вне форума Ответить с цитированием
Старый 04.08.2012, 16:52   #23
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Да, но с этим ничего не поделать, разве только использовать rvalue-reference из C++11 или константные ссылки. Но покажите сценарий использования, пока что я не увидел целесообразности Ваших чаяний. Быть может и не нужен универсальный механизм для всех параметров?
Дело в том, что механизм должен работать при поддержке старого стандарта. Он должен бегать под гцц, вингв, студийным компиляторов 2008 версии.

Если бы у меня была поддержка нового стандарта, то я вообще бы особо даже и не заморачивался. В новом стандарте есть такие вещи, которые позволяют делать все что угодно в плане кодо-генерации.


Я не могу вам предоставить весь сценарий (ибо много букав получится)
Могу сообщить идею:

функция-приемник получает данные любых типов, и в любых количествах (существует ограничение на максимальное количество возможных аргументов. Но предусмотрена возможность в любой момент времени увеличить это количество).

Внутри функции-приёмника создается объект "передатчик"

Передатчик создает "носитель аргументов", особый тип данных, в который он может загрузить значения всех полученных аргументов.

Передатчик выполняет запрос к получателю: "типы аргументов удовлетворяют ожидаемым?"

Если нет - ситуацию будет разруливать "служба безопасности".
Если все в порядке, то передатчик пуляет носитель аргументов получателю.

Получатель берет в руки носитель, из которого вытряхивает все аргументы, какие ему были нужны, ну и что то с ними делает.

Если получатель изменит значение мутабельной ссылки, то оригинал (переменная, которую запулил в приемник) тоже изменится.

Вообще, вся эта хрень не плохо работает. Но есть проблема - если принимать аргументы по значению - срабатывают копирующие конструкторы.

А если принимать по константным ссылкам - то внутри приёмника, передатчик уже не знает, был ли полученный аргумент изначально константным, или не был. А получатель теоретически может изменить значение константного объекта.

приведу пример:

Код:
const int& b = 10;
Foo(b);

cout<< "b="<<b<<endl; //вывод 33
Никаких ошибок компиляции. Никаких ошибок рантайма.
Все работает, ничего не ломается.

Падумаешь... изменили значение константы магического числа...
_Bers вне форума Ответить с цитированием
Старый 04.08.2012, 22:58   #24
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Используйте лучше <<
waleri вне форума Ответить с цитированием
Старый 04.08.2012, 23:39   #25
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

_Bers, быть может будет лучше, если вместо своих абстрактных описаний Вы приведёте код? Трудно понять, что же именно Вам надо. Может быть средств boost хватит, вроде boost :: (c)ref?
netrino вне форума Ответить с цитированием
Старый 05.08.2012, 16:22   #26
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
_Bers, быть может будет лучше, если вместо своих абстрактных описаний Вы приведёте код? Трудно понять, что же именно Вам надо. Может быть средств boost хватит, вроде boost :: (c)ref?
Большое спасибо за совет. Я ознакомился с бустовскими механизмами, и выработал для себя приемлемое решение.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация выигрышной стратегии для компьютера makc56 Паскаль, Turbo Pascal, PascalABC.NET 13 18.05.2012 13:32
движок для стратегии lamer69 Свободное общение 1 22.05.2011 01:16
Карта для стратегии sincemix Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 21.07.2010 23:54
Передача аргументов программе на Си, как реализовать? cympak Общие вопросы C/C++ 6 02.03.2010 19:49
Типы аргументов при перегрузке функций Arkuz Общие вопросы C/C++ 4 24.02.2009 01:16