Я не уверен, для чего предназначена структура identity
, но удаление ее дает более четкое сообщение об ошибке (сбой вывода шаблона).
Компилятор не может получить тип std::function
из лямбды. Чтобы доказать это, компилируется следующее:
storage.get(2, std::function([](comp_a& a, comp_c& c) { // Doesn't work
std::cout << a.val << " " << c.val << std::endl;
}));
Итак, чтобы заставить его работать, нам просто нужно помочь компилятору в получении типов. Заимствуя у http://www.cplusplus.com/forum/general/223816/ следующие работы:
namespace detail
{
template < typename T > struct deduce_type;
template < typename RETURN_TYPE, typename CLASS_TYPE, typename... ARGS >
struct deduce_type< RETURN_TYPE(CLASS_TYPE::*)(ARGS...) const >
{
using type = std::function< RETURN_TYPE(ARGS...) >;
};
}
template
struct storage
{
template
void get(size_t index, typename std::function f)
{
f(std::get(components)[index] ...);
}
template
void get(size_t index, Lambda l)
{
get( index, typename detail::deduce_type< decltype( &Lambda::operator() ) >::type( l ) );
}
std::tuple ...> components;
};
Можно переименовать основную соединительную линию ответвления, как Greg предположил, или можно также создать соединительную линию, которая является символьной ссылкой на основное ответвление так, чтобы у и мерзавца и svn пользователей было 'основное' ответвление, к которому они привыкли.
git symbolic-ref refs/heads/trunk refs/heads/master
Примечание, что соединительная линия не является гражданином первого класса. Если Вы, которых контроль trunk
и выполняет git status
, Вы на самом деле будете на master
, однако можно использовать эти trunk
команда во всех местах, что Вы используете имя ответвления (журнал, слияние, и т.д.).
Нет ничего специального об имени "ведущего устройства" в Мерзавце, это просто называют этим условно (и по умолчанию). Можно, конечно, назвать это "соединительной линией", если Вам нравится:
git branch -m master trunk
Это очень похоже на Подверсию, где имя "соединительная линия" только называют этим условно также. Вы, возможно, назвали основное ответвление "ведущим устройством" в Подверсии.