Информация об изменениях

Сообщение константа и не константа одновременно(почти) от 08.05.2015 7:17

Изменено 08.05.2015 7:27 niXman

привет!

есть такой тип:
template<typename T>
struct pair {
   const char *key;
   const T     &val;
};

template<typename T>
void set(const pair<T> &pair) {
   // тут все хорошо, используем 'pair.key' и 'pair.val'
}
template<typename T>
void get(pair<T> &pair) {
   // тут все плохо, ибо 'pair.val' - константная ссылка
}

использовать это дело предполагается так:
pair<int> pi{"int", 33};

set(pair<int>{"int", 33});
set(pi);

////////////////////////////////
get(pi); // читаем в 'pair<int>'
int rint=0;
get(pair<int>{"int", pint}); // читаем в 'pint' являющийся lvalue, 'pair<int>' же - rvalue


как победить?


спасибо.
константа и не константа одновременно(почти)
привет!

есть такой тип:
template<typename T>
struct pair {
   const char *key; // никогда не изменяется, назначается только при инициализации 'pair'
   const T     &val;
};

template<typename T>
void set(const pair<T> &pair) {
   // тут все хорошо, используем 'pair.key' и 'pair.val'
}
template<typename T>
void get(pair<T> &pair) {
   // тут все плохо, ибо 'pair.val' - константная ссылка
}

использовать это дело предполагается так:
pair<int> pi{"int", 33};

set(pair<int>{"int", 33});
set(pi);

////////////////////////////////
get(pi); // читаем в 'pair<int>'
int rint=0;
get(pair<int>{"int", pint}); // читаем в 'pint' являющийся lvalue, 'pair<int>' же - rvalue


как победить?


спасибо.