给定以下两个结构,一个可以从两个嵌套的“嵌套”类派生,并从派生对象调用 foo() 和 bar():
struct WithNested1 {
template<class T> struct Nested {
void foo();
};
};
struct WithNested2 {
template<class T> struct Nested {
void bar();
};
};
struct Test : WithNested1::Nested<Test>,
WithNested2::Nested<Test>
{
};
Test test;
test.foo();
test.bar();
但是,如果两个外部类都作为可变参数模板参数传递,您将如何从它们派生?
例如,这无法编译:
template<typename... Ts>
struct Test : Ts::template Nested<Test>...
{
};
Test<WithNested1, WithNested2> test;
test.foo();
test.bar();
错误:'foo':不是'Test'的成员
错误:'bar':不是'Test'的成员
奇怪的是,如果对 foo() 和 bar() 的调用被删除,它就会编译。