Я пытаюсь статически проверить, существует ли тип в списке параметров вариативного шаблона. Однако этот список шаблонов фактически существует в классе, которому передается один тип. Ответ здесь показывает, как проверить список параметров или параметр pack, но я не знаю, как тестировать класс, содержащий шаблоны с переменным числом аргументов.
Например
template <typename ...S>
class Services {};
template <typename Services>
class ServiceLocator
{
public:
template <typename T>
T& Resolve()
{
static_assert( check_t_exists_in_variadic_template_within_Services );
return Find<T>();
}
};
Что я мог бы написать в этом static_assert, чтобы убедиться, что каждый вызов этого локатора службы проверяется и выдается ошибка компилятора, если Resolve вызывается с типом, который не существует в списке параметров шаблона внутри Services?
Что мне особенно нужно, так это что-то вроде:
static_assert(is_any<T,Services::S...>::value, "T does not exist in Services::S");
static_assert
, вам нужно только распаковать свои вариативные аргументыServices
вместо предоставления фиксированного списка типов, как это сделал я. - person syam   schedule 17.10.2013is_any
, а затем выполнитеstatic_assert( is_any<T, Services...>::value, "my error message" );
- person dyp   schedule 17.10.2013