Правило 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
Означает ли правило SONAR cpp:S5213, что функции, принимающие лямбда-выражения, должны быть реализованы в файле .h? ⇐ C++
Программы на C++. Форум разработчиков
1760095383
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 = []{};
Подробнее здесь: [url]https://stackoverflow.com/questions/79787280/does-sonars-cpps5213-rule-imply-that-functions-accepting-lambdas-must-be-imple[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия