Можем ли мы обнаружить элементы function template
, variable template
, class
/struct
/union template
или alias template
без знания количества или характера параметров template
/non-template
?
Когда я пытаюсь думать об этом, мне ничего не приходит в голову. Но пусть структура с шаблоном функции члена:
struct foo
{
// Really random. Let 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
?
Символы типа основанные на экземпляре не применяются здесь, потому что (теоретически) мы не знаем, какие параметры мы должны использовать, в каком порядке и сколько из них. Может быть, какой-то волшебный метод поиска был бы уместным? Или, может быть, это просто невозможно?
При поиске я нашел этот вопрос, но решения в ответах требуют знания о природе 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
{ };
};