Как я могу использовать псевдоним для параметра шаблона, который не используется для специализации шаблона? ⇐ C++
Как я могу использовать псевдоним для параметра шаблона, который не используется для специализации шаблона?
[*]У меня есть шаблон класса template struct foo.
[*]Этот класс может быть вложен, например Итак: foo. Единственный параметр, который принимает структуру foo, — это первый параметр с именем типа T
[*]Я не могу изменить порядок параметров
< /ul>
Проблема, с которой я столкнулся, заключается в том, что для вложенного шаблона специализации struct foo я не использую параметр шаблона int I вообще.
Мне хотелось бы иметь возможность использовать псевдоним для этого параметра, чтобы мне не приходилось писать этот бесполезный параметр для вложенных переменных foo. Я попробовал два способа, но ни один из них не работает. Мне любопытно посмотреть, есть ли вообще способ сделать это чисто. Можете ли вы мне помочь?
Пример кода
#include
template concept foo_base_t = requires { typename T::base_tag; };
template concept foo_nested_t = requires { typename T::nested_tag; };
template concept foo_t = foo_base_t or foo_nested_t;
template concept bar_base_t = requires { typename T::base_tag; };
template concept bar_nested_t = requires { typename T::nested_tag; };
template concept bar_t = bar_base_t or bar_nested_t;
// Version 1 doesn't work
//=============================
template
struct foo
{
using base_tag = void;
};
template
struct foo
{
using nested_tag = void;
};
//=============================
// Version 2 doesn't work
//=============================
template
struct bar_impl
{
using base_tag = void;
};
template
struct bar_impl
{
using nested_tag = void;
};
template
using bar = bar_impl;
template
using bar = bar_impl;
//=============================
int main()
{
using T = foo;
foo o;
using U = bar;
bar o;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... plate-spec
[*]У меня есть шаблон класса template struct foo.
[*]Этот класс может быть вложен, например Итак: foo. Единственный параметр, который принимает структуру foo, — это первый параметр с именем типа T
[*]Я не могу изменить порядок параметров
< /ul>
Проблема, с которой я столкнулся, заключается в том, что для вложенного шаблона специализации struct foo я не использую параметр шаблона int I вообще.
Мне хотелось бы иметь возможность использовать псевдоним для этого параметра, чтобы мне не приходилось писать этот бесполезный параметр для вложенных переменных foo. Я попробовал два способа, но ни один из них не работает. Мне любопытно посмотреть, есть ли вообще способ сделать это чисто. Можете ли вы мне помочь?
Пример кода
#include
template concept foo_base_t = requires { typename T::base_tag; };
template concept foo_nested_t = requires { typename T::nested_tag; };
template concept foo_t = foo_base_t or foo_nested_t;
template concept bar_base_t = requires { typename T::base_tag; };
template concept bar_nested_t = requires { typename T::nested_tag; };
template concept bar_t = bar_base_t or bar_nested_t;
// Version 1 doesn't work
//=============================
template
struct foo
{
using base_tag = void;
};
template
struct foo
{
using nested_tag = void;
};
//=============================
// Version 2 doesn't work
//=============================
template
struct bar_impl
{
using base_tag = void;
};
template
struct bar_impl
{
using nested_tag = void;
};
template
using bar = bar_impl;
template
using bar = bar_impl;
//=============================
int main()
{
using T = foo;
foo o;
using U = bar;
bar o;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... plate-spec
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как использовать частичные специализации в качестве параметров шаблона шаблона?
Anonymous » » в форуме C++ - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Форвардное объявление члена перечисления специализации шаблона - не работает с GCC
Anonymous » » в форуме C++ - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-