Первая часть кода:
template< typename data_type >
void Agent::set_solution(
const solution_key_t& key,
data_type& data,
std::function< void(data_type&, data_type&) > function,
std::double_t probability)
{
if (std::find(this->m_solutions.begin(), this->m_solutions.end(), key) == this->m_solutions.end())
{
using solution_map_t = std::map< solution_key_t, Solution >;
this->m_solutions.insert(solution_map_t::value_type(key, Solution()));
}
this->m_solutions[key].set_solution< data_type >(data, function, probability);
} // set_solution
Вторая часть кода:
#define AGENT(id) System::instance().agents[id]
static const solution_key_t default_key = "key";
static const std::double_t default_probability = 1.0;
#define DEFAULT_LAMBDA_EQ(T) [](T& to, T& from) { to = from; }
using asset_id_t = std::uint64_t;
auto function_asset_id_smth = [](agent_id_t id)
{
using T = std::pair< asset_id_t, std::string >;
T asset_id(static_cast< asset_id_t >(1), static_cast< std::string >("smth"));
AGENT(id)->set_solution< T >(
default_key,
asset_id,
DEFAULT_LAMBDA_EQ(T),
default_probability);
}; // function_asset_id_smth
Возникает ошибка: Ошибка C2440 : невозможно преобразовать "initializer list" в "std::pair" в строке с вставкой нового элемента в map в первом фрагменте кода. Я не вполне понимаю, как трактовать эту ошибку, где-то теряется или добавляется спецификатор const? Или в аргументах при вызове функции следует указывать другие спецификаторы? Как мне кажется, проблема с key в первом фрагменте кода, но я не могу пока установить, какая именно. Для Solution есть конструктор по умолчанию, там все нормально. solution_key_t это std::string.
Никак не могу разобраться как заставить работать Cimg с jpegПодключить всё подключил: