[*]Diese Klasse kann wie folgt verschachtelt werden also: foo. Der einzige Parameter, der eine foo-Struktur annimmt, ist der erste Typname T
[*]Ich kann die Reihenfolge der Parameter nicht ändern
< /ul>
Das Problem, das ich habe, ist, dass ich für die verschachtelte Spezialisierungsvorlage struct foo das nicht verwende template-Parameter int I überhaupt.
Ich hätte gerne eine Möglichkeit, diesen Parameter mit einem Alias zu versehen, damit ich diesen nutzlosen Parameter nicht für verschachtelte foo-Variablen schreiben muss. Ich habe zwei Möglichkeiten ausprobiert, aber keine davon funktioniert. Ich bin gespannt, ob es überhaupt eine Möglichkeit gibt, das sauber zu machen. Können Sie mir helfen?
Codebeispiel
Code: Select all
#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;
}