Можно ли обнаружить элемент function template
, variable template
, class
/struct
/union template
или alias template
, не зная сумму, или характер template
/non-template
параметров?Можно ли проверить наличие шаблонов членов только по идентификатору?
Когда я пытаюсь думать об этом, мне ничего не приходит в голову. Но давайте структуру с шаблоном функции члена:
struct foo
{
// Really random. Let's assume we don't know this declaration, just the name "bar"
template <class T, std::size_t N, class... Args>
void bar(T a, T b, T(&c)[N], Args const& ...);
};
Как проверить, если foo::bar
шаблон существует?
Инстанцирование на основе черты типа здесь не применимы, потому что (теоретически) мы не имеем знания , какие параметры мы должны использовать, в каком порядке и , сколько из них. Может быть, какой-то волшебный метод поиска был бы уместным? Или, может быть, это просто невозможно?
При поиске, я нашел this question, но решения в ответах требуют знаний о природе template
.
Вот мой первый не удалось попытку для обнаружения struct template
:
struct foo
{
template<class T>
struct bar { };
};
template <class T, class = void>
struct has_template_bar : std::false_type
{ };
template <class T>
struct has_template_bar <T, void> : std::true_type
{
template<template<class...> class tplt_tplt = T::bar> // Invalid default argument
struct placebo
{ };
};
Если есть два таких метода, я угадайте, вы также хотите, чтобы он вернул истину? –
@AaronMcDaid Это было бы здорово! Но я боюсь, что добавление возможности перегрузки может еще больше осложнить ситуацию. – xinaiz
Я уверен, что я видел ответ на этот вопрос всего несколько дней назад, в котором также был рассмотрен случай перегрузки. Не могу найти его сейчас. Я буду продолжать смотреть! –