Если вам не удастся изменить делетера во время выполнения, я настоятельно рекомендую использовать настраиваемый тип удаления. Например, если вы используете указатель функции для вашего делета, sizeof(unique_ptr<T, fptr>) == 2 * sizeof(T*)
. Другими словами, половина байтов объекта unique_ptr
теряется.
Однако запись пользовательского удаления для обертывания каждой функции является проблемой. К счастью, мы можем написать шаблон, шаблонный для функции:
Поскольку C ++ 17:
template <auto fn>
using deleter_from_fn = std::integral_constant<decltype(fn), fn>;
template <typename T, auto fn>
using my_unique_ptr = std::unique_ptr<T, deleter_from_fn<fn>>;
// usage:
my_unique_ptr<Bar, destroy> p{create()};
До C ++ 17:
template <typename D, D fn>
using deleter_from_fn = std::integral_constant<D, fn>;
template <typename T, typename D, D fn>
using my_unique_ptr = std::unique_ptr<T, deleter_from_fn<D, fn>>;
// usage:
my_unique_ptr<Bar, decltype(destroy), destroy> p{create()};
Если ваш запрос находится непосредственно в наборе данных отчета (поэтому НЕ является хранимой процедурой), тогда ваш последний SELECT сработает
SELECT * FROM table WHERE value in (@parameter)
SSRS преобразует значения в список через запятую и вставит их в ваш скрипт так что вам не нужно ничего делать.
в SSRS 2016 я могу использовать
= any(string_to_array(@parameter, ','))
, а также учитывать несколько значений