Я хочу иметь метод с функцией объекта со значением по умолчанию в качестве параметра, который будет называться с лямбда-функции, как, например:значение по умолчанию объект функции в качестве параметра функции будет вызываться с лямбда
#include <iostream>
#include <functional>
void func(const std::function<void()>& f = {}){
if(f) f();
else std::cout << "or not" << std::endl;
}
int main() {
func([](){ std::cout << "hello" << std::endl; });
func();
}
, но в Visual Studio 2012 это не компилируется (например, компилируется с использованием Visual Studio 2015 или g ++), жалуясь на значение по умолчанию {}. Измените это на:
void func(const std::function<void()>& f = nullptr){
исправить проблему. 1) Является ли это функцией, не поддерживаемой компилятором? 2) Есть ли разница между обоими?
Он работает на VS2015. Для некоторых определений работ. Он компилируется. – doctorlove
Что значит иметь функцию по умолчанию? – NathanOliver
1) Он компилируется с 'C++ 14' ([link] (http://ideone.com/TiTiP9)). 2) Если вы хотите * blank * labda, вы можете написать: 'f = []() {}' - не просто 'f = {}', но тогда вы всегда попадаете в 'if'. –