Я использую некоторые шаблоны функций для хранения данных в целом и по типам.
Я определил свои template<class T> store()
функции, как показано ниже.
Если я вызываю функции явно с типом uint64_t
store<uint64_t>( &p, my_value );
Я получаю сообщение об ошибке компиляции, говорящее
call of overloaded 'store(char**, uint64_t&)' is ambiguous
candidates are:
void store(char**, T) [with T = long unsigned int]
void store(char**, T2) [with T1 = long unsigned int,
T2 = long unsigned int]
Если вместо этого я пишу это без типа, у меня нет ошибки (компилятор выводит тип).
store( &p, my_value );
Я заметил, что компилятор предполагает, что функция имеет второй аргумент, переданный по ссылке, в то время как в моем объявлении шаблона второй аргумент должен быть скопирован.
Знаете ли вы, почему это произошло и что нужно сделать, чтобы решить эту двусмысленность или быть более понятным при объявлении типа?
С наилучшими пожеланиями
AFG
template< class T >
inline void store( char** buffer, T data ){
memcpy( *buffer, &data, sizeof( T ) );
buffer += sizeof(T);
}
template< class T1, class T2 >
inline void store( char** buffer, T2 data ){
memcpy( *buffer, &data, sizeof( T1 ) );
buffer += sizeof(T1);
}