Хорошо, я использую Visual Studio 2010, чтобы связываться с лямбдами в шаблонах.В VC ++ есть странная причуда, связанная с параметрами шаблона, но я нашел обходной путь для вызова статической функции параметра шаблона (в данном примере T :: magic) с помощью ключевого слова auto.Однако я столкнулся с другим препятствием.
Скажем, у меня есть один из многих классов с функцией "магия", и только первые 2 параметра имеют значение для моего вызова позже.Он может иметь или не иметь некоторые параметры по умолчанию после первых 2-х. Меня это не особо интересует для этого приложения, мне нужно только вызвать магию (запуск, другое).Uhoh - один из этих классов:
struct Uhoh
{
static int magic(char* start, int otherthing, bool doom = false);
}
Я делаю вызов с этим шаблоном.Я должен использовать обходной путь использования автоматического типа, чтобы заставить T :: magic для него работать в лямбда-функции.
template<typename T> void example()
{
auto themagic = T::magic;
std::function<int (char*)> test = [=](char* start) -> int
{
return themagic(start, 0);
};
test(0);
}
А потом я звоню или как угодно.
int main()
{
example<Uhoh>();
}
Я получаю сообщение об ошибке "слишком мало аргументов для вызова", хотя "магия" может принимать два аргумента.Теперь я не могу точно знать, какой будет тип для «другого» в любой из «магических» функций.Все, что я знаю, это то, что 0 будет допустимым значением.Передача типа того, что еще будет в функцию «пример», в лучшем случае будет крайне раздражающим.
Как правильно набрать «themagic», чтобы VC ++ не выдавал ошибку?