在具有多个实例的成员上调用方法的语法

syntax for calling a method on a member with multiple instances

我是以下情况

template<typename T>
class base{
    public:
        void test(){}
};

template<typename T>
class helper{
    public:
        base<T> t;
};

template<typename T, typename ... Ts>
class holder: public helper<T>, helper<Ts>... {
};

int main(int argc, char *argv[]){
    holder<int, short, long> h;
    h.t.test(); // of course, error here
}

编译直到我尝试引用 holder<...> 的模棱两可的 t。引用特定继承 helper 之一的 t 的语法是什么?


P.S.

老实说,我不知道如何给这个问题起标题。如果有人可以编辑它,那将是一个很大的帮助。

只需像往常一样使用 class 名称限定符:

h.helper<int>::t.test();

确实,这是一种奇怪的语法,但它与写作没有什么不同

foo.Base::member

从派生的 class 实例访问隐藏的基础 class 成员。