Merge branch 'get-symbol-support-capture-lambdas' into 'master'

Add get_symbol overload as fallback for lambdas with capture

See merge request micro-ROS/ros_tracing/ros2_tracing!100
This commit is contained in:
Ingo Lütkebohle 2019-10-14 13:48:12 +00:00
commit cde12ea0b7
2 changed files with 26 additions and 0 deletions

View file

@ -38,4 +38,11 @@ const char * get_symbol(std::function<T(U...)> f)
return _demangle_symbol(f.target_type().name()); return _demangle_symbol(f.target_type().name());
} }
// Fallback meant for lambdas with captures
template<typename L>
const char * get_symbol(L && l)
{
return _demangle_symbol(typeid(l).name());
}
#endif // TRACETOOLS__UTILS_HPP_ #endif // TRACETOOLS__UTILS_HPP_

View file

@ -57,6 +57,25 @@ TEST(TestUtils, valid_symbol_lambda) {
"invalid symbol"; "invalid symbol";
} }
/*
Testing symbol resolution lambdas with capture.
*/
TEST(TestUtils, valid_symbol_lambda_capture) {
int num = 1;
auto l = [ = ]() {return num + 1;};
EXPECT_STREQ(
get_symbol(l),
"TestUtils_valid_symbol_lambda_capture_Test::TestBody()::{lambda()#1}") <<
"invalid symbol";
auto m = [&](int other_num) {return num + other_num;};
EXPECT_STREQ(
get_symbol(m),
"TestUtils_valid_symbol_lambda_capture_Test::TestBody()::{lambda(int)#2}") <<
"invalid symbol";
}
/* /*
Testing symbol resolution for std::function object created from std::bind. Testing symbol resolution for std::function object created from std::bind.
*/ */