Правило SONAR cpp:S5213 гласит, что
Параметры шаблона должны быть предпочтительнее "std::function" при настройке поведения во время компиляции
Мы пытались реализовать это, заменив std::function параметром шаблона, но это, похоже, подразумевает, что функция должна быть полностью реализована в заголовочном файле, поскольку явная специализация шаблона невозможна для лямбда-выражений, поскольку каждая лямбда-выражение имеет свой собственный уникальный тип(*).
Есть ли другие варианты сделать SONAR счастливым, т. е. реализовать функцию в файле .cpp, которая принимает лямбда-выражение без использования std::function или указателей функций?
Это работает, но мы предпочитаем перенести реализацию в myClass.cpp:
myClass.h
class MyClass {
public:
template
void run(CallbackFunction cb) { cb(); }
};
main.cpp
#include "myClass.h"
int main() {
MyClass instance;
instance.run([]{});
}
(*) Даже это, казалось бы, простое задание не выполняется:
auto lambda1 = []{};
using lambda_type = decltype(lambda1);
lambda_type lambda2 = []{};
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-be-imple