Означает ли правило SONAR cpp:S5213, что функции, принимающие лямбда-выражения, должны быть реализованы в файле .h?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Означает ли правило SONAR cpp:S5213, что функции, принимающие лямбда-выражения, должны быть реализованы в файле .h?

Сообщение Anonymous »

Правило 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»